C++ 如何确定线程是否有消息队列?
有没有办法从threadId中找出线程是否有消息队列C++ 如何确定线程是否有消息队列?,c++,windows,winapi,message-queue,message,C++,Windows,Winapi,Message Queue,Message,有没有办法从threadId中找出线程是否有消息队列 基本上,有些windows api只有在线程具有消息队列时才起作用。window您可以尝试从具有消息队列的线程使用AttachThreadInput。我认为,如果调用中引用的任一线程没有队列,AttachThreadInput将失败。请注意,AttachThreadInput可能由于其他原因而失败。您可以使用带有线程ID的PostThreadMessage。如果PostThreadMessage返回false,而GetLastError返回E
基本上,有些windows api只有在线程具有消息队列时才起作用。window您可以尝试从具有消息队列的线程使用AttachThreadInput。我认为,如果调用中引用的任一线程没有队列,AttachThreadInput将失败。请注意,AttachThreadInput可能由于其他原因而失败。您可以使用带有线程ID的PostThreadMessage。如果PostThreadMessage返回false,而GetLastError返回
ERROR\u INVALID\u THREAD\u ID
,则线程ID无效或线程没有消息队列
更多信息在多线程的世界中,您无法正确地解释在查看时可能发生的变化。线程消息队列特别有趣;它们是在线程需要时创建的。所以你能得到的唯一答案是“我上次检查时没有” 因此,如果没有线程消息队列,大多数Windows API实际上不会失败。他们只是创造它。有一个例外,
PostThreadMessage
。这将需要为另一个线程创建一个线程消息队列,可能是在另一个线程创建自己的线程消息队列的同时。因此,它是唯一可能失败的API
但是
PostThreadMessage
失败是不是很糟糕?这(通过`GetLastError())告诉您,当Windows试图传递消息时,队列在重要时刻不存在 我认为这是MSalters所需的功能。来自MSDN:“消息发布到的线程必须已创建消息队列,否则对PostThreadMessage的调用将失败”。因此,对于我来说,这是一个了解目标线程是否有消息队列的好方法。您看到了什么竞争条件?请求用于检查任何线程,而不仅仅是调用线程。