如何在CPU负载为100%时保持UI响应(主要使用C++和Qt)?

Sai*_*iku 10 c++ user-interface qt freeze

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

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

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

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

我想保持我的UI响应.事实上,我希望我的工作线程只有在没有其他动作要做时才能工作.我试图将工作线程优先级更改为低,但它不起作用.我也尝试在工作线程中进行睡眠(10),但因为我可以有很多线程,所以它们不会同时处于睡眠状态,因此它也无法正常工作.

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

小智 4

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

  • 如果您希望操作系统响应更快,请确保不会消耗太多 RAM 并以较低优先级启动进程 - 仅当操作系统必须决定应运行进程中的哪个线程时,才会考虑线程优先级,但整个进程仍然有效当考虑系统中的其他进程时,CPU 利用率为 100%
  • 确保不要运行太多线程,好的解决方案是创建与核心数量一样多的使用 100% cpu 的线程,如果您想要更多,则使用多任务技术

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

  • 好的,谢谢大家,我觉得自己很蠢,但我找到了问题所在!实际上,这只是我的应用程序中的一个错误。我使用进程资源管理器来跟踪我的线程优先级,我发现它的设置不正确!但设置优先级就是解决方案! (2认同)