如何从Delphi中的主线程向TThread发送消息?

时间:2008-11-07 23:04:22

标签: multithreading delphi

我想向线程发送消息并在线程中处理它。我怎么能在Delphi中这样做?我想PostMessage是要走的路,但我到目前为止看到的例子正在描述另一种方式,即从线程到主线程。

3 个答案:

答案 0 :(得分:6)

我甚至不会尝试解释或编写任何代码。看看这个教程。它有点旧,但非常好imho。 Multithreading - The Delphi Way

答案 1 :(得分:6)

您可以在线程中有一个消息循环(可能带有隐藏的通知窗口)并向其发送Windows消息,或者您可以使用更本机(更少GUI)的方式来执行此操作,例如队列受关键部分保护,并结合线程等待的手动复位事件和发送线程信号。

更通用的解决方案是生产者 - 消费者队列,在经典实现中使用几个信号量来跟踪消费者和生产者,并使用第三个信号量来对队列进行互斥访问;但是,网上可以获得更优的生产者 - 消费者队列。

答案 2 :(得分:3)

你为什么需要这样做?只有一个原因,我曾经不得不在辅助线程中创建一个消息循环,这是因为该线程使用了COM对象。对 OleInitialize() OleUnitialize()的调用表明您需要标准 GetMessage()循环。在这种情况下,还需要使用 PostThreadMessage()将消息发布到该线程,因为正常的阻塞同步调用会干扰消息循环。否则,就是不要这样做。

如果您在Delphi 2007或2009,请务必通过PrimožGabrijelčič查看OmniThreadLibrary,它应该让您的工作更轻松。