Mar*_*ski 9 delphi queue resume multithreading suspend
我需要在Delphi中创建一个具有以下特征的线程:
我无法向线程发送消息,因为它没有窗口句柄.
我应该使用WaitForObject的某些变体吗?如果是这样,等待的是什么?如果没有,那么我如何保持线程等待,然后在新数据进入队列时唤醒它?
我读过Multithreading - Delphi Way,它似乎没有回答我的问题.也许 OmniThreadLibrary可以做我需要的事情; 我无法分辨,因为文档很少.我不太了解一般的线程,以确定库是否会在这里提供帮助以及如何使用它(甚至为什么要使用它而不是仅使用TThread后代).
gab*_*abr 13
OmniThreadLibrary绝对可以帮到你.来自OTL发行版的测试5应该可以帮助您开始.
在本演示中,"开始"按钮创建线程并设置一些参数和计时器(如果不需要,可以在代码中删除)."更改消息"向线程发送消息,并在线程的OMChangeMessage方法中处理此消息.然后线程将一些信息发送回客户端(本演示中的OMSendMessage,但您可以在您正在进行工作的同一消息中执行此操作),主线程通过OmniEventMonitor组件接收此消息."停止"按钮停止工作线程.
如果在线程繁忙时有更多消息到达,则只要您的工作方法完成其工作,它们就会排队并进行处理.当无事可做时,线程将在进程中使用零CPU周期等待下一条消息.
编辑
在Delphi 2009及更高版本中,Background Worker模式提供了一种更简单的解决方案.