c++ - 仅消息窗口中的线程泵消息

标签 c++ windows winapi bluetooth

我需要创建一个 dll 来管理 Windows 8.1/10 上的一些 IP 蓝牙低功耗设备。

我的第一个挑战是能够拦截连接/断开连接事件。我按照 MSDN 对 registering Bluetooth device notifications 的说明设法实现了这一点,并按照 Registering for Device Notifications例子。结果是一个工作控制台应用程序。

接下来,我希望将它包装在一个 DLL 中,并有一个专门的线程泵来处理纯消息窗口的消息。问题:

  • 这是一个合理的解决方案,还是我最好使用调用线程为此窗口(显然既不是单一窗口也不是主要窗口)泵送消息?

  • 如果这是要走的路,我该如何创建一个线程来为特定窗口发送消息?

  • 我可以简单地依赖Thread Affinity吗? , 在新线程中创建仅消息窗口,他们将从此愉快地耦合在一起?

最佳答案

这听起来像是一个非常合理的解决方案,它使您的 DLL 不依赖于正在使用的应用程序是否甚至运行消息循环,并且即使该应用程序确实有消息循环,它也可以使用过滤来阻止您的窗口的消息被捡起来。

是的,窗口与创建它们的线程耦合,每个具有消息循环的线程都维护自己的消息队列。

因此,要让您的线程接收窗口的消息,您需要让它创建窗口(大概是在它进入消息循环之前作为线程初始化的一部分)。老实说,这部分就像您在典型的 WinMain 中看到的一样,只是使用了一个单独的线程和纯消息窗口。

关于c++ - 仅消息窗口中的线程泵消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47515371/

相关文章:

c++ - boost 和 c++11 线程兼容性

c++ - program.exe : 0xC0000005: Access violation reading location 0xCCCCCCD0 中 0x010F2F1C 处未处理的异常

c++ - WaitForSingleObject 未锁定,仍允许其他线程更改 C++ 中的值

c - GDI 泄漏问题

c++ - 在 C++ 中绘制 Windows 10 壁纸

c++ - Visual Studio : copy installation folder and setup it up to be auto-detected by Qt Creator

c++ - 在C++中生成随机非重复数数组

windows - LoadLibrary 引用计数

c# - 使用 WinAPI 获取文件夹的选定项目

java - 程序暂停,直到用户按下 Control+C