我的应用程序中有一个工作线程,偶尔会收到应该快速显示在QML UI中的信息。当我有这样的信息部分时,我发出信号,这是由UI线程上的对象接收的。Qt信号到达UI线程明显延迟
我希望这个过程能够非常快速地响应,以便尽可能快地在QML UI中显示更改(这很重要,因为工作线程处理外部控制器,并且我希望用户与控制器交互的最短“关键路径” UI更改)。
但是我发现,emit signal()
和在UI线程中调用的槽之间的时间差总是20-40毫秒。为什么这样?
我能做些什么来加速这个?信号发射后我在工作线程中尝试调用QCoreApplication::processEvents()
,但这几乎没有改变任何东西。
的几点思考:
- 我可以打电话
processEvents
但不知何故UI线程? - 使用具有高优先级的事件代替信号。它会有帮助吗?
OS:Win8.1,Qt的5.5
QCoreApplication :: processEvents用于UI线程的事件循环。发布更多关于信号连接,插槽处理程序,UI运行循环的代码。 – hiitiger
鉴于QML以刷新率刷新,您将在60Hz刷新率下有16.6ms的延迟*无论如何*。 20ms的延迟是正常的,40ms的延迟也是错误的。你的用户无论如何都说不清,那么问题是什么。你想做什么?顺便说一句,'processEvents'几乎不需要任何正确书写的代码。你绝对*不需要它。 –