Qt 事件处理程序和 boost ASIO 的 io_service 有啥区别?

Posted

技术标签:

【中文标题】Qt 事件处理程序和 boost ASIO 的 io_service 有啥区别?【英文标题】:What is the difference between Qt event handler and boost ASIO's io_service?Qt 事件处理程序和 boost ASIO 的 io_service 有什么区别? 【发布时间】:2017-03-18 21:28:17 【问题描述】:

两者都是带有事件循环的异步事件处理程序。这是标题。

在 Qt 中,事件循环以 QApplication::exec() 开头,而 io_service 以 io_service::run() 开头。我的问题是在这一点之后。 我可以在 Qt 中而不是在 io_service 中实现什么,反之亦然?有什么限制?什么时候更可取(忽略 Qt 的 GUI)?

更多不重要的信息:在我脑海中引发这个问题的原因是我正在测试一些基于 C++ Qt 的程序,其中我的 GUI 的逻辑位于派生自 QObject 的类中.为了我的测试目的,我正在寻找将函数(如在 io_service 中)发布到 Qt 事件处理程序的方法(因此,为简单起见,绕过 QObject::connect() 事物),但随后意识到唯一的发布函数 QApplication::postEvent(); 需要 仅 Qt 事件作为参数;不是函数、仿函数或 lambda!我没有问这个问题,因为这是一个明显的XY problem,我仍在努力。

【问题讨论】:

【参考方案1】:

我认为 QObject 和 io_service 之间没有任何重大区别。至于你的 XY 问题,QMetaObject::invokeMethod(obj, []) 接受一个 lambda。

【讨论】:

以上是关于Qt 事件处理程序和 boost ASIO 的 io_service 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Boost::ASIO VS Qt 网络

boost::asio 学习

用QT创建WINDOWS服务程序

Boost::Asio入门剖析

从多个线程调用 boost::asio::io_service 运行函数

使用 Qt 提升 asio