有没有办法从threadId中找出一个线程是否有消息队列?
基本上有一些windows api只有在线程有消息queue.window
时才有效答案 0 :(得分:7)
您可以将PostThreadMessage与线程的ID一起使用。如果PostThreadMessage返回false并且GetLastError返回ERROR_INVALID_THREAD_ID
,则线程ID无效或者线程没有消息队列。
更多信息http://msdn.microsoft.com/en-us/library/ms644946(VS.85).aspx
答案 1 :(得分:2)
在多线程世界中,您无法正确地考虑在您查找时可能发生变化的事情。线程消息队列特别有趣;它们是在线程需要它们时创建的。所以你能得到的唯一答案是“不是我上次检查时”。
因此,如果没有线程消息队列,大多数Windows API实际上都不会失败。他们只是创造它。有一个例外,PostThreadMessage
。这将需要为另一个线程创建一个线程消息队列,可能与其他线程正在创建自己的线程同时。因此,它是唯一可以失败的API。
但PostThreadMessage
失败是不是很糟糕?这告诉你(通过`GetLastError())当Windows尝试传递你的消息时,队列在它重要的那一刻不存在。
答案 2 :(得分:2)
我认为IsGUIThread是必需的功能
答案 3 :(得分:0)
您可以尝试从具有消息队列的线程中使用AttachThreadInput。我相信如果调用中引用的任何线程没有队列,AttachThreadInput将失败。请注意,AttachThreadInput可能由于其他原因而失败。