有没有什么办法可以从threadId中find,如果一个线程有消息队列?
基本上有一些窗口的API只有当一个线程有消息queue.window
您可以使用PostThreadMessage和线程的ID。 如果PostThreadMessage返回false并且GetLastError返回ERROR_INVALID_THREAD_ID
,则线程ID无效或线程没有消息队列。
更多信息http://msdn.microsoft.com/en-us/library/ms644946(VS.85).aspx
在一个多线程的世界里,你不能正确地考虑在你看的时候会改变的事情。 线程消息队列特别有趣; 它们是在线程需要它们时创建的。 所以你能得到的唯一答案是“不是当我上次检查”。
因此,如果没有线程消息队列,大多数Windows API将不会真正失败。 他们只是创造它。 有一个例外, PostThreadMessage
。 这将需要创建一个线程消息队列的另一个线程,可能在同一时间,其他线程正在创建自己的。 因此,它是唯一可能会失败的API。
但是PostThreadMessage
失败了吗? 这告诉你(通过`GetLastError()),当Windows试图传递你的消息时,这个队列在重要时刻就不存在了。
我认为IsGUIThread是需要的功能
你可以尝试使用AttachThreadInput从一个线程,它有一个消息队列。 如果在调用中引用的任何线程没有队列,我相信AttachThreadInput失败。 请注意,AttachThreadInput可能由于其他原因失败。