10

我在需要在多线程应用程序中保持 UI(和完整操作系统)响应之间存在问题。

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

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

在功能强大的计算机上我没有问题,因为 cpu 可以处理所有数据并为 GUI 线程处理用户请求留出时间。但在一台旧电脑上,它不起作用,CPU 100% 用于处理我的数据,并且 UI 滞后,可能需要 10 秒才能处理按钮单击。

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

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

4

1 回答 1

4

无法在上面的列表中添加我的评论,所以我必须在这里添加我的几分钱:

  • 如果您希望操作系统更具响应性,请确保您不会消耗太多 RAM 并以较低优先级启动进程 - 仅当操作系统必须决定应该运行进程中的哪个线程时才考虑 afaik 线程优先级,但整个进程仍然有效考虑到系统中的其他进程时,在 100% cpu 上
  • 确保不要运行太多线程,好的解决方案是创建尽可能多的使用 100% cpu 的线程,如果你想要更多,那么使用多任务技术

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

于 2012-07-17T12:38:47.643 回答