IOmniWorker:在Task中执行的函数在哪里?

Hol*_*rwa 3 delphi omnithreadlibrary

我正在创建一个OmniWorker-Task来进行一些数据处理.
到目前为止,该任务能够从/向其他任务接收和发送消息.

现在我需要为这个任务实现main函数.此函数将连续运行并执行数据处理,而消息将修改其行为.

但是我在哪里放这个主要功能?
是否有类似OmniWorker的"执行"方法,我需要实现什么?

gab*_*abr 6

实际上,TOmniWorker并不真正支持'monolythic execution block + messaging'成语.TOmniWorker背后的整个想法是,大多数代码都是在消息处理程序中执行的(当然还有从它们调用的代码中) - 就像在典型的单线程Delphi应用程序中一样.

您只需发送一条特殊消息("开始!")并在消息处理程序中开始执行,但请记住,在执行消息处理程序时不会处理消息.[更具体一点 - 您可以发送它们但是如果您想要接收它们,则必须通过Task.Comm.Receive手动执行.]这并不是意料之外的,因为每个TOmniWorker都是单线程环境而且它是执行消息处理程序,它不能做任何其他事情.

  • 如果您正在进行长时间处理并且希望在这个长时间处理运行时处理消息,则必须在此长时间处理过程中自己接收消息.没有更好的方法. (4认同)