微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何找出一个线程是否有消息队列?

有没有什么办法可以从threadId中find,如果一个线程有消息队列?

基本上有一些窗口的API只有当一个线程有消息queue.window

delphi – lockingTPanel中的子控件,但使用认的油漆

是否有一个工具来窥探发送到窗口的消息

已检测到CallbackOnCollectedDelegate

delphi:如何响应WM_SettingChange / WM_WinIniChange?

是否有可能通过Windows键(可能没有挂钩)捕获Windows开始菜单popup窗口?

您可以使用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可能由于其他原因失败。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐