【发布时间】:2010-12-19 20:19:00
【问题描述】:
有没有办法从 threadId 中找出线程是否有消息队列?
基本上有一些windows api只有在线程有消息queue.window时才起作用
【问题讨论】:
标签: c++ windows winapi message-queue message
有没有办法从 threadId 中找出线程是否有消息队列?
基本上有一些windows api只有在线程有消息queue.window时才起作用
【问题讨论】:
标签: c++ windows winapi message-queue message
您可以尝试从具有消息队列的线程中使用 AttachThreadInput。如果调用中引用的任一线程没有队列,我相信 AttachThreadInput 会失败。请注意,虽然 AttachThreadInput 可能由于其他原因而失败。
【讨论】:
您可以使用带有线程 ID 的 PostThreadMessage。如果 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是需要的功能
【讨论】: