2014-09-06 51 views

回答

4

总之 - 你要么需要合并两个事件循环或使用单独的线程和手动同步事件处理程序..

您粘贴展示了如何处理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事件) - 我打算移植平台支持插件以便能够整合它,但这仍然是未来。我还没有在Windows上测试过它:)

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

请让我知道是否有任何更多的信息,我可以提供。

Regards,