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 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章