Всем привет. Ломаю голову как реализовать задумку.
Программа получаем данные от устройств по различным интерфейсам (Последовательный порт/TCP/Сервис/т.п.). Все каналы передачи данных подразумевают задержку, что при синхронном чтении-записи приводит к зависанию пользовательского интерфейса. Стандартная проблема и решение понятно - асинхронный подход.
Но, я хочу реализовать базовый класс (TMyDataProvider) с общими методами (Open/Close/Read/Write), предоставив программисту только описывать реализацию этих методов в предках. В зависимости от считанных данных объект базового класса выполняет то или иное действие, а может получить дополнительную порцию данных. Ломаю голову, как реализовать, допустим такой метод:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | procedure TMyDataProvider . SomeProc;
var
...
begin
for i := 0 to 127 do
begin
(последовательный порт). Write (i, SizeOf(i));
(последовательный порт).Read(SomeVar, SizeOf(SomeVar));
case SomeVar of
0 : DoThis;
1 : DoThat;
....
else
ReadMoreData;
end ;
end ;
end ;
|
, при этом избежать подвисание UI.