当线程中有消息处理时,如一般的线程中显示操作结果时,此时如果要在主线程中使用WaitForSingleObject的话,往往会导致阻塞,例如如下的主线程终止副线程,而副线程中用了诸如SendMessage的函数,那么自然相互锁住了,因为你运行等待的函数没有返回,那么线程中的消息得不到处理,自然就两边的线程都阻塞在那里,此时可以使用API函数MsgWaitForMultipleObjects来解决,如下所示。将等待到的消息进行处理。再继续等待,直到超时或等待成功。
本文介绍了一种在线程间通过使用MsgWaitForMultipleObjects函数避免阻塞的方法。当主线程需要终止副线程时,特别是在副线程中有消息处理操作的情况下,直接使用WaitForSingleObject可能导致双方线程陷入死锁。文中提供了一个具体的C++实现示例,展示了如何在等待过程中处理消息队列,从而避免了线程间的相互锁定。
当线程中有消息处理时,如一般的线程中显示操作结果时,此时如果要在主线程中使用WaitForSingleObject的话,往往会导致阻塞,例如如下的主线程终止副线程,而副线程中用了诸如SendMessage的函数,那么自然相互锁住了,因为你运行等待的函数没有返回,那么线程中的消息得不到处理,自然就两边的线程都阻塞在那里,此时可以使用API函数MsgWaitForMultipleObjects来解决,如下所示。将等待到的消息进行处理。再继续等待,直到超时或等待成功。
3859

被折叠的 条评论
为什么被折叠?