您可以在线程中使用消息循环(可能带有隐藏的通知窗口)并向其发送Windows消息,或者您可以使用一种更本地化(非GUI)的方式来实现,例如由关键部分保护的队列与手动重置事件组合,线程等待并发送线程信号。更一般的解决方案是生产者-消费者队列,在经典实现中使用了几个信号量来跟踪消费者和生产者以及第三个信号量用于互斥访问队列;但是,更优化的生产者-消费者队列可以在网络上找到。
为什么需要这样做呢?我曾经不得不在辅助线程中创建消息循环的唯一原因是该线程使用了COM对象。对 OleInitialize() 和 OleUnitialize() 的调用表明您需要一个标准的 GetMessage() 循环。在这种情况下,还需要使用 PostThreadMessage() 向该线程发送消息,因为普通的阻塞同步调用会干扰消息循环。否则,请不要这样做。如果您使用的是 Delphi 2007 或 2009,请务必查看 Primož Gabrijelčič 的 OmniThreadLibrary,它应该能让您的工作变得更加容易。