【问题标题】:How to integrate Asio network library with Qt library?如何将 Asio 网络库与 Qt 库集成?
【发布时间】:2011-11-06 11:42:00
【问题描述】:

我想同时使用 Asio 和 Qt 吗?他们每个人都有两个必须调用的方法,并且每个方法都是阻塞的,例如:Asio 有 io_service.run() 和 qt 有 QCoreApplication.exec() 如果我运行其中一个,则另一个无法运行。

我有两个解决方案:

  1. 创建另一个线程并从中调用 io_service.run()。
  2. 创建一个周期为 100 毫秒的计时器,并从调用 QCoreApplication.exec() 的同一线程调用 io_service.poll()。

这些解决方案正确吗?

【问题讨论】:

标签: qt exec


【解决方案1】:

这是一个简单的解决方案,适用于所有平台,但它有一些小缺点。您正在向应用程序的 asio 部分引入延迟,这可能是可接受的,也可能是不可接受的 - 取决于您的情况。

您可能对 my solution 感兴趣,它真正集成了 asio 和 QT 主循环。

有关此主题的更多信息,请参阅以下问题:How to integrate Boost.Asio main loop in GUI framework like Qt4 or GTK

【讨论】:

    【解决方案2】:

    您肯定想研究应用程序的多线程。 Qt 可以很好地帮助您解决问题platform-independent threading classes。您还需要在objects owned by different threads 之间发送communication,并且还需要记住painting is limited outside of the GUI thread。

    【讨论】:

    • 不,这样Qt使用select架构,我需要Linux kernel 2.6的proactor架构,Asio有这个功能。所以这不是我的问题? 我需要使用 Asio。 抱歉回复晚了。
    • 我理解您的问题的意思是:您需要在 Qt 应用程序中使用 ASIO,但不确定是否/如何对其进行多线程处理。为混乱道歉,但你的确切问题是什么? :)
    • 我以前的解决方案好吗?在性能方面:每 100 毫秒调用一次 io_service.poll() 是件好事吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2013-05-06
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多