我在多线程应用程序中需要保持UI(和完整OS)响应之间存在一个问题。

我正在开发一个应用程序(基于c++和Qt),该应用程序同时接收并转换来自多个流的许多视频帧。

每个流都在其自己的单独工作线程(使用DirectX)中进行检索,转换和呈现。这意味着我没有使用默认的GUI线程来渲染框架。

在功能强大的计算机上,我没有问题,因为cpu可以处理所有数据并为GUI线程保留时间来处理用户请求。但是在旧计算机上,它无法正常工作,CPU以100%的速度处理我的数据,并且UI落后,可能需要10秒才能处理按钮单击。

我想保持我的用户界面响应。实际上,我希望我的工作线程仅在没有其他操作可做时才起作用。我试图将工作线程优先级更改为低,但是它不起作用。我还在工作线程中尝试过sleep(10),但是因为我可以有很多线程,所以它们不会同时进入睡眠状态,因此也不起作用。

在这种情况下(无论工具包使用什么),保持UI响应的最佳方法是什么?

最佳答案

无法在上面的列表中添加我的评论,因此我必须在此处添加几分钱:

  • 如果您想让OS更具响应性,那么请确保您不消耗过多的RAM并以较低的优先级启动进程-仅当OS必须决定应运行进程中的哪个线程时才考虑afaik线程优先级,当将系统中的其他进程考虑在内
  • 时,可以在100%cpu上工作
  • 确保不要运行太多线程,一个好的解决方案是创建使用100%cpu的线程(与内核一样多),如果要更多,则使用多任务处理技术

  • 要检查的一件事-如何显示视频?您确定显示速率(来自流的数据)与显示卡的刷新速率匹配吗?当您有要显示的数据时,是否通知主线程需要更新屏幕(更好的解决方案)还是从每个线程强制显示框架(不好的解决方案)?

    07-24 09:46
    查看更多