线程中的PostMessage returns 时,消息一定在接收者的消息队列中吗?
When PostMessage returns in thread is the message surely in the receiver's message queue?
这是我在 SO 上的第二个问题,希望我没有搞砸任何事情!
这个问题是理论性的,因为我的实现看起来很完美,我只是想确定它没问题。
我创建了多个线程,作为他们工作的一部分 PostMessage() 到主线程。
然后主线程等待所有线程终止。在所有线程终止主线程调用后 Application.ProcessMessages。那么问题来了,这个调用之后,确定所有消息都收到了吗?
如果 PostMessage()
returns 非零,则保证消息已放入拥有 window 的线程的消息队列中。
Application.ProcessMessages()
是阻塞函数。它不会退出,直到调用线程的消息队列中的未决消息被完全清除。
现在,发布的消息是否真正到达它发布到的 window 的消息过程是另一回事。有一些因素可以防止这种情况发生。错误消息队列过滤。 window 在消息从队列中移除之前被销毁。等等。但是,鉴于您描述的示例,这些情况不太可能发生。
所以是的,一旦所有线程都完全终止,并且对 Application.ProcessMessages()
的后续调用退出,您保证不会再收到来自线程的任何消息。
这是我在 SO 上的第二个问题,希望我没有搞砸任何事情!
这个问题是理论性的,因为我的实现看起来很完美,我只是想确定它没问题。
我创建了多个线程,作为他们工作的一部分 PostMessage() 到主线程。 然后主线程等待所有线程终止。在所有线程终止主线程调用后 Application.ProcessMessages。那么问题来了,这个调用之后,确定所有消息都收到了吗?
如果 PostMessage()
returns 非零,则保证消息已放入拥有 window 的线程的消息队列中。
Application.ProcessMessages()
是阻塞函数。它不会退出,直到调用线程的消息队列中的未决消息被完全清除。
现在,发布的消息是否真正到达它发布到的 window 的消息过程是另一回事。有一些因素可以防止这种情况发生。错误消息队列过滤。 window 在消息从队列中移除之前被销毁。等等。但是,鉴于您描述的示例,这些情况不太可能发生。
所以是的,一旦所有线程都完全终止,并且对 Application.ProcessMessages()
的后续调用退出,您保证不会再收到来自线程的任何消息。