Qt中的libuv事件循环

4
1个回答

6
简而言之- 你需要合并两个事件循环或使用单独的线程,并手动同步事件处理程序。第一个链接展示了如何处理自上次调用以来发生的libuv事件。如果没有分派事件(它将继续轮询),则while语句将使用~100%的CPU。qt-event-dispatcher-libuv是我创建的项目,旨在解决同样的问题。但是,它确实像你描述的那样工作-通过使用libuv处理Qt的事件循环(通过这样做-将两个事件循环合并为一个)。要使用它,您只需要在应用程序中注册事件分派程序。其中使用此库的示例可以在链接2中找到。链接1:http://qt-project.org/doc/qt-5/qcoreapplication.html#setEventDispatcher,链接2:https://github.com/svalaskevicius/qtjs-generator/blob/master/src/runner/main.cpp#L179
使用这种方法仍有一个问题 - 尽管它在Linux上运行得非常好,但在OS X上存在一些问题,因为Qt的Cocoa平台支持插件处理了一些Cocoa的事件循环操作,并没有提供一个好的API来合并它(目前它们在小的超时后被释放更新,所以有一些(几乎不可察觉的?)可见的延迟来处理GUI事件)- 我计划将平台支持插件移植到能够集成它的地方,但这仍然是未来的事情。我还没有在Windows上测试过它 :)
另一种解决方案可能是尝试从另一个方向合并两个循环,这是我所做的 - 而不是使Qt使用libuv,可以提供使用Qt处理程序的libuv api - 尽管这也需要相当大量的工作。
如果还有更多信息需要提供,请告诉我。
问候,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接