我需要在Delphi中创建一个具有以下特征的线程:
- 等待主线程将数据添加到共享队列。
- 处理队列中的所有数据,将结果返回到主线程(对于最后一部分,我将仅将消息发送到主窗口)。处理非常耗时,因此当工作线程处理先前的条目时,可能会将新数据添加到队列中。
- 恢复等待,使用尽可能少的 CPU 周期。
我无法向线程发送消息,因为它没有窗口句柄。
我应该使用 WaitForObject 的某种变体吗?如果是这样,还等什么?如果没有,那么我怎样才能让线程等待,然后在新数据进入队列时唤醒它?
我读了多线程 - Delphi 方式,这似乎没有回答我的问题。也许全线程库可以做我需要的事;我无法判断,因为文档很少。我对线程了解不够,无法弄清楚该库是否会在这里提供帮助以及如何使用它(甚至为什么要使用它而不是仅仅使用 TThread 后代)。
OmniThreadLibrary 绝对可以在这方面为您提供帮助。 OTL 发行版中的测试 5 应该可以帮助您入门。
在此演示中,“开始”按钮创建线程并设置一些参数和计时器(如果不需要,您可以在代码中删除它们)。 “更改消息”向线程发送一条消息,该消息在线程的 OMChangeMessage 方法中进行处理。然后,线程将一些信息发送回客户端(本演示中为 OMSendMessage,但您可以在您将在其中执行工作的同一消息中执行此操作),主线程通过 OmniEventMonitor 组件接收此消息。 “停止”按钮停止工作线程。
如果在您的线程繁忙时有更多消息到达,它们将在您的工作方法完成其工作后立即排队并进行处理。当无事可做时,线程将使用进程中的零 CPU 周期等待下一条消息。
EDIT
在 Delphi 2009 及更高版本中,后台工作者模式提供了一个更简单的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)