【发布时间】:2010-12-16 16:09:54
【问题描述】:
我需要在 Delphi 中创建一个具有以下特征的线程:
- 等到主线程将数据添加到共享队列。
- 处理队列中的所有数据,将结果返回到主线程(在最后一部分,我将只向主窗口发送消息)。处理非常耗时,因此在工作线程处理之前的条目时,可能会将新数据添加到队列中。
- 继续等待,使用尽可能少的 CPU 周期。
我无法向线程发送消息,因为它没有窗口句柄。
我应该使用 WaitForObject 的一些变体吗?如果是这样,那还要等什么呢?如果没有,那我怎样才能让线程等待,然后在新数据进入队列时唤醒它?
我读过Multithreading - The Delphi Way,它似乎没有回答我的问题。也许OmniThreadLibrary可以做我需要的;我不知道,因为文档很少。我对线程的了解还不够,无法弄清楚该库是否会在这里提供帮助以及如何使用它(甚至为什么要使用它而不是仅仅使用 TThread 后代)。
【问题讨论】:
-
您写道:“我读过多线程 - 德尔福之道,这似乎无法回答我的问题。”但在第 9 章中确实如此。生产者 - 消费者 - 关系正是您要寻找的,而信号量确实是实现此类队列的一种方式。
标签: multithreading delphi queue resume suspend