gpt4 book ai didi

qt4 - 如何在 Qt4 或 GTK 等 GUI 框架中集成 Boost.Asio 主循环

转载 作者:行者123 更新时间:2023-12-03 10:15:25 25 4
gpt4 key购买 nike

有什么方法可以将 Boost.Asio 与 Qt4(首选)或 GTK 主循环集成?
GTK 提供 poll(2) 之类的 API,所以技术上应该是可能的。 Qt 提供了自己的网络层,但我更喜欢使用为 Boost.Asio 编写的现有代码。
我想整合它们没有 使用额外的线程。

对于 Qt4(首选)或 GTKmm,是否有任何引用方法可以执行此操作?

谢谢。

编辑

我想澄清几件事以使答案更容易。 Qt 和 GTKmm 都提供
“选择喜欢”功能:

  • http://qt-project.org/doc/qt-5.0/qtcore/qsocketnotifier.html
  • http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__MainLoop.html

  • 所以,问题是,如何将现有的“选择器/轮询器”作为 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 支持可能需要完全不同的方法或非常相似 - 我真的不知道。

    关于qt4 - 如何在 Qt4 或 GTK 等 GUI 框架中集成 Boost.Asio 主循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001032/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com