IOmniWorker: Куда идет функция для выполнения в Задаче? - PullRequest
3 голосов
/ 20 января 2011

Я создаю OmniWorker-Task, чтобы выполнить некоторую обработку данных.
Пока что задача может получать и отправлять сообщения от / к другим задачам.

Теперь мне нужно реализовать основноефункция для этой задачи.Эта функция будет работать непрерывно и выполнять обработку данных, в то время как сообщения будут изменять ее поведение.

Но куда мне поместить эту основную функцию?
Есть ли что-то вроде метода "Execute" для OmniWorkerчто мне нужно реализовать?

1 Ответ

6 голосов
/ 20 января 2011

На самом деле TOmniWorker на самом деле не поддерживает идиому «монолитный блок выполнения + обмен сообщениями».Вся идея TOmniWorker состоит в том, что большая часть кода выполняется в обработчиках сообщений (и в коде, вызываемом из них, конечно) - как это происходит в типичном однопоточном приложении Delphi.

Вы можете простоотправьте специальное сообщение («Старт!») и начните выполнение в обработчике сообщений, но имейте в виду, что сообщения не будут обрабатываться во время выполнения вашего обработчика сообщений.[Если быть более точным - вы можете отправлять их, но если вы хотите получать их, вам придется делать это вручную через Task.Comm.Receive.] Это не совсем неожиданно, поскольку каждый TOmniWorker является однопоточным окружением, и хотявыполняет обработчик сообщений, он больше ничего не может делать.

...