有什么方法可以将 Boost.Asio 与 Qt4(首选)或 GTK 主循环集成?
GTK 提供 poll(2) 之类的 API,所以技术上应该是可能的。 Qt 提供了自己的网络层,但我更喜欢使用为 Boost.Asio 编写的现有代码。
我想整合它们没有 使用额外的线程。
对于 Qt4(首选)或 GTKmm,是否有任何引用方法可以执行此操作?
谢谢。
编辑
我想澄清几件事以使答案更容易。 Qt 和 GTKmm 都提供
“选择喜欢”功能:
所以,问题是,如何将现有的“选择器/轮询器”作为 react 器集成到
Boost.Asio
io_service .今天,Boost.Asio 可以使用 select、kqueue、epoll、/dev/poll 和 iocp 作为 reactor/proactor 服务。我想将它集成到 GUI 框架的主循环中。
欢迎任何建议和解决方案(更好)。
请您参考如下方法:
这是一个相当古老的问题,但对于那些现在正在阅读它的人,我想分享 my code这是用于 boost::asio 的 QAbstractEventDispatcher 的实现。
您只需要在创建 QApplication 之前添加以下行(通常在 main() 中)。
QApplication::setEventDispatcher(new QAsioEventDispatcher(my_io_service));
这将导致 io_service 与 qt 应用程序在一个线程中一起运行,而不会产生额外的延迟和性能下降(就像在“不时”调用 io_service::poll() 的解决方案中一样)。
不幸的是,我的解决方案仅适用于 posix 系统,因为它使用 asio::posix::stream_descriptor 。 Windows 支持可能需要完全不同的方法或非常相似 - 我真的不知道。

