Всем привет. Ломаю голову как реализовать задумку.
Программа получаем данные от устройств по различным интерфейсам (Последовательный порт/TCP/Сервис/т.п.). Все каналы передачи данных подразумевают задержку, что при синхронном чтении-записи приводит к зависанию пользовательского интерфейса. Стандартная проблема и решение понятно - асинхронный подход.
Но, я хочу реализовать базовый класс (TMyDataProvider) с общими методами (Open/Close/Read/Write), предоставив программисту только описывать реализацию этих методов в предках. В зависимости от считанных данных объект базового класса выполняет то или иное действие, а может получить дополнительную порцию данных. Ломаю голову, как реализовать, допустим такой метод:
Код:
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.