gpt4 book ai didi

qt - qt 中的 libuv 事件循环

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

有没有不使用多线程的方法?

我找到了这个https://stackoverflow.com/a/17329626/4014896

但我不明白它是如何工作的。在示例中,它不应该导致 CPU 使用率达到 100% 吗?我怎样才能将它嵌入到 QT 中?

还有这个:https://github.com/svalaskevicius/qt-event-dispatcher-libuv但根本没有任何文档。但从我的外观来看,它似乎是从示例 QSocket 转换为 uv_tcp_socket 的东西,这不是我正在寻找的东西。

最佳答案

简而言之 - 您要么需要合并两个事件循环,要么使用单独的线程并手动同步事件处理程序。

您粘贴的第一个链接显示了如何处理自上次调用以来发生的 libuv 事件。同时声明,如果没有调度任何事件,将使用约 100% 的 CPU(因为它将继续轮询)。

第二个链接(qt-event-dispatcher-libuv)是我为解决相同问题而创建的项目。但是,它确实按照您所描述的方式工作 - 通过使用 libuv 来处理 Qt 的事件循环(并通过这样做 - 将两个事件循环合并为一个)。

要使用它,您只需使用 http://qt-project.org/doc/qt-5/qcoreapplication.html#setEventDispatcher 在应用程序中注册事件调度程序即可。 。使用此库的示例 - https://github.com/svalaskevicius/qtjs-generator/blob/master/src/runner/main.cpp#L179

使用这种方法仍然有一个问题 - 虽然它在 Linux 上工作得很好,但在 OS X 上却存在一些问题,因为 Qt 的 Cocoa 平台支持插件处理一些 Cocoa 的事​​件循环操作,并且没有提供一个很好的 API 来合并它也是如此(目前它正在更新它们,它在一小段时间超时后被释放,因此处理 GUI 事件有一些(几乎?)明显的滞后) - 我计划移植平台支持插件以便也能够集成它但这还是 future 的事。我还没有在 Windows 上测试过:)

另一种解决方案可能是尝试从我所做的另一个方向合并两个循环 - 可以提供使用 Qt 处理程序的 libuv 的 api,而不是让 Qt 使用 libuv - 尽管它需要大量的工作也如此。

如果我可以提供更多信息,请告诉我。

问候,

关于qt - qt 中的 libuv 事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702312/

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