我在多线程应用程序中需要保持UI(和完整OS)响应之间存在一个问题。
我正在开发一个应用程序(基于c++和Qt),该应用程序同时接收并转换来自多个流的许多视频帧。
每个流都在其自己的单独工作线程(使用DirectX)中进行检索,转换和呈现。这意味着我没有使用默认的GUI线程来渲染框架。
在功能强大的计算机上,我没有问题,因为cpu可以处理所有数据并为GUI线程保留时间来处理用户请求。但是在旧计算机上,它无法正常工作,CPU以100%的速度处理我的数据,并且UI落后,可能需要10秒才能处理按钮单击。
我想保持我的用户界面响应。实际上,我希望我的工作线程仅在没有其他操作可做时才起作用。我试图将工作线程优先级更改为低,但是它不起作用。我还在工作线程中尝试过sleep(10),但是因为我可以有很多线程,所以它们不会同时进入睡眠状态,因此也不起作用。
在这种情况下(无论工具包使用什么),保持UI响应的最佳方法是什么?
最佳答案
无法在上面的列表中添加我的评论,因此我必须在此处添加几分钱:
要检查的一件事-如何显示视频?您确定显示速率(来自流的数据)与显示卡的刷新速率匹配吗?当您有要显示的数据时,是否通知主线程需要更新屏幕(更好的解决方案)还是从每个线程强制显示框架(不好的解决方案)?