多线程UI的最佳方式?

use*_*547 4 c++ qt

正如文档中明确指出的那样,Qt GUI必须仅从主线程访问.对于具有多个大型和繁忙表的复杂应用程序,这可能是Qt喜欢的所有字体大小文本度量计算的瓶颈.我能想到的唯一选择是使用单独的流程进行多任务处理.这些表目前的速度与您可以获得的速度一样快,自定义模型直接映射到从另一个线程提供的缓存,使用dataChanged()调用最保守的一组更改的单元格.我已经使用vTune进行了概述,70%的应用程序时间现在都在Qt呈现代码中.有什么建议?

Isr*_*man 5

我没有使用QT,但只从一个线程(GUI线程)访问GUI几乎是我熟悉的任何GUI中的已知问题.我为这种情况使用了2个解决方案,其中我更喜欢第一个:

1)您的表单将以定时器间隔更新GUI(在本例中为表格).在GUI线程的事件上激活计时器.在那些计时器事件中,您从全局变量中读取数据并更新表.可以通过任意多个线程更新全局变量.您可能需要同步(信号量,例如)访问全局变量.

2)在许多GUI API中,线程可以通过将GUI线程交给函数(或对象)来更新GUI,并要求它在其上下文中尽快执行它.调用线程同时阻塞,直到GUI完成操作.我记得三个这样的功能- Invoke,InvokeLater从Java和C#,或wx.CallAfterwxPython中的.