【发布时间】:2019-01-27 07:17:48
【问题描述】:
我正在使用一些蓝牙库,并且对于一些蓝牙回调,有必要使用 Windows 消息循环。但根据我的要求,我需要创建一个没有任何 GUI 的普通 C++ 程序。是否可以创建没有窗口的消息循环?
main(){
Discovery disc;
disc.startDiscovery();
}
Discovery::startDiscovery(){
__hook(&CallBackFromLibrary::OnDiscoveryStarted, &obj, &Discovery::OnDiscoveryStarted);
__hook(&CallBackFromLibrary::OnDiscoveryComplete, &obj, &Discovery::OnDiscoveryComplete);
}
apiObject.discoverBluetoothDevices();
在这个示例代码中,我应该在调用 apiObject.discoverBluetoothDevices() 后收到回调作为 OnDiscoveryStarted 和 OnDiscoveryComplete。
由于他们使用消息循环进行回调,我只在 GUI 应用程序上得到了回调。如何使用消息循环接收回调,因为库文档说消息循环是必需的。
【问题讨论】:
-
我认为这是可能的。您创建消息循环的代码是什么(例如,minimal reproducible example)?
-
消息循环不依赖于窗口,但窗口依赖于消息循环。但是库使用什么样的消息传递不涉及向窗口发送消息?我能想到的只有 2 种可能性 - 线程消息,或单元线程 ActiveX/COM 对象..
-
蓝牙库很可能会创建一个隐藏窗口。很常见。因此,您必须自己抽出一个消息循环以使其继续运行,这与您自己创建一个窗口时所做的没有什么不同。
-
那或者它被设计成可以在有或没有窗口的情况下工作,并且更喜欢两个用例的通用代码(这似乎是合理的)。在此之前,我还编写了一些库(而且,公平地说,还提供)一个消息循环,而无需任何线程:它使组件之间的交互变得简单。
标签: c++ visual-c++ windows-messages message-loop