【问题标题】:IOmniWorker: Where goes the function to execute within the Task?IOmniWorker:Task 中执行的函数在哪里?
【发布时间】:2011-01-20 16:18:55
【问题描述】:

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

现在我需要实现这个任务的主要功能。该函数将持续运行并进行数据处理,而消息将修改其行为。

但是我应该把这个 main 函数放在哪里呢?
我需要为 OmniWorker 实现什么类似于“执行”的方法?

【问题讨论】:

    标签: delphi omnithreadlibrary


    【解决方案1】:

    实际上,TOmniWorker 并不真正支持“单一执行块 + 消息传递”的成语。 TOmniWorker 背后的整个想法是,大部分代码都在消息处理程序中执行(当然也包括从它们调用的代码)——就像在典型的单线程 Delphi 应用程序中一样。

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

    【讨论】:

    • 感谢您的解释。对于我想做的事情,是否有更好的方法?基本上,我需要一个带有执行方法和消息处理的线程。如果可能,使用 OTL。
    • 如果你正在做一个长处理并且你想在这个长处理运行时处理消息,你必须自己从这个长处理的中间接收消息。没有更好的办法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2021-01-05
    • 2018-11-28
    • 2016-10-23
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多