Delphi线程等待数据,处理它,然后继续等待

Mar*_*ski 9 delphi queue resume multithreading suspend

我需要在Delphi中创建一个具有以下特征的线程:

  • 等待主线程将数据添加到共享队列.
  • 处理队列中的所有数据,将结果返回给主线程(对于最后一部分,我只是将消息发送到主窗口).处理非常耗时,因此当工作线程处理先前的条目时,可以将新数据添加到队列中.
  • 使用尽可能少的cpu周期继续等待.

我无法向线程发送消息,因为它没有窗口句柄.

我应该使用WaitForObject的某些变体吗?如果是这样,等待的是什么?如果没有,那么我如何保持线程等待,然后在新数据进入队列时唤醒它?

我读过Multithreading - Delphi Way,它似乎没有回答我的问题.也许 OmniThreadLibrary可以做我需要的事情; 我无法分辨,因为文档很少.我不太了解一般的线程,以确定库是否会在这里提供帮助以及如何使用它(甚至为什么要使用它而不是仅使用TThread后代).

gab*_*abr 13

OmniThreadLibrary绝对可以帮到你.来自OTL发行版的测试5应该可以帮助您开始.

在本演示中,"开始"按钮创建线程并设置一些参数和计时器(如果不需要,可以在代码中删除)."更改消息"向线程发送消息,并在线程的OMChangeMes​​sage方法中处理此消息.然后线程将一些信息发送回客户端(本演示中的OMSendMessage,但您可以在您正在进行工作的同一消息中执行此操作),主线程通过OmniEventMonitor组件接收此消息."停止"按钮停止工作线程.

如果在线程繁忙时有更多消息到达,则只要您的工作方法完成其工作,它们就会排队并进行处理.当无事可做时,线程将在进程中使用零CPU周期等待下一条消息.

编辑

在Delphi 2009及更高版本中,Background Worker模式提供了一种更简单的解决方案.

  • OmniThreadLibrary有很大的潜力,只要它有更好的记录...... (2认同)