Multithreading 当PostMessage在线程中返回时,消息肯定在接收方中';s消息队列?

Multithreading 当PostMessage在线程中返回时,消息肯定在接收方中';s消息队列?,multithreading,delphi,winapi,postmessage,Multithreading,Delphi,Winapi,Postmessage,这是我的第二个问题,希望我没有搞砸任何事情 这个问题是理论性的,因为我的实现似乎工作得很好,我只是想确定它是否正常 我创建了多个线程,作为其工作的一部分,将PostMessage()发送到主线程。 然后,主线程等待所有线程终止。所有线程终止后,主线程调用Application.ProcessMessages。因此,这个调用之后的问题是,是否确实收到了所有消息?如果PostMessage()返回非零,则可以保证消息已被放入拥有要发布的窗口的线程的消息队列中 Application.ProcessM

这是我的第二个问题,希望我没有搞砸任何事情

这个问题是理论性的,因为我的实现似乎工作得很好,我只是想确定它是否正常

我创建了多个线程,作为其工作的一部分,将PostMessage()发送到主线程。 然后,主线程等待所有线程终止。所有线程终止后,主线程调用Application.ProcessMessages。因此,这个调用之后的问题是,是否确实收到了所有消息?

如果
PostMessage()
返回非零,则可以保证消息已被放入拥有要发布的窗口的线程的消息队列中

Application.ProcessMessages()
是一个阻止函数。在调用线程的消息队列中完全清除挂起的消息之前,它不会退出

现在,已发布的消息是否实际到达其发布到的窗口的消息过程是另一回事。有一些因素可以防止这种情况发生。错误的消息队列筛选。从队列中删除消息之前正在销毁的窗口。然而,考虑到你所描述的例子,不太可能发生这些情况


因此,是的,一旦所有线程完全终止,并且对
Application.ProcessMessages()
的后续调用退出,就可以保证不再从线程接收任何进一步的消息。

取决于函数返回的内容,零指定失败。除此之外,是的,ProcessMessages将从队列中删除消息,直到没有消息为止。除了@SertacAkyuz所说的之外,它还取决于发送的特定消息。在某些情况下,Windows会将多条消息合并成一条消息。@KenWhite AFAIK,这只适用于系统生成的消息,而不适用于用户发布的消息。@RemyLebeau:我看不到任何区别消息来源的东西,只看到消息本身。这篇文章没有足够的细节来说明所有对PostMessage的调用都会成功。还有:。谢谢!我也是这么想的。这些消息是定制消息(WM_USER+114),一个测试,例如6个线程,总共发送了大约1000条这些消息,在我看来,所有这些消息都是根据需要到达的,符合我在开篇文章中所写的逻辑。