有没有不使用多个线程的方法?
我发现了这个/sf/answers/1213073851/
但是我不知道它是如何工作的。在示例中是否应该导致100%CPU使用率?以及如何将其嵌入到QT中?
还有这个:https : //github.com/svalaskevicius/qt-event-dispatcher-libuv 但是根本没有文档。但是从我看来,似乎是从示例QSocket转换为uv_tcp_socket的东西,这不是我要搜索的东西。
小智 6
简而言之-您将需要合并两个事件循环,或者使用单独的线程并手动同步事件处理程序。
您粘贴的第一个链接显示了如何处理自上次调用以来发生的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 api,而不是让Qt使用libuv-尽管它也需要大量工作。
请让我知道是否还有更多我可以提供的信息。
问候,