【问题标题】:C++\Win32 Running application/thread in low priority mode?C++\Win32 以低优先级模式运行应用程序/线程?
【发布时间】:2012-08-11 12:23:01
【问题描述】:

我正在为我的线程使用 CreateThread。

一个线程占用了很多 cpu %,我需要减少它。

是的,我知道我可以调用 Sleep(),但在这种情况下,实现起来很复杂。

如何将线程设置为以低优先级运行,或者如果不可能,那么如何以低优先级运行我的应用程序?

【问题讨论】:

  • 最外层循环中的Sleep(0); 通常足以显着降低使用率。实现起来有多难?
  • '一个线程占用了很多 cpu %,我需要减少它。'为什么?如果它在做有用的工作,那为什么要减少它呢?如果它没有做有用的工作,为什么还要运行?
  • 例如,如果 Thread.Sleep 不在循环中,则可能难以实现。

标签: c++ multithreading winapi


【解决方案1】:

使用SetThreadPriority函数,详情搜索msdn

【讨论】:

  • 谢谢,奇怪的是,即使设置为空闲,这也无助于 CPU 百分比。
  • 嗯,线程在做什么?如果它是 CPU 循环,它将占用一个完整的核心,除非其他更高优先级的线程需要该核心。
  • 是的,您对 CPU 的分配方式存在根本性的误解。如果没有其他线程需要 CPU,即使是空闲优先级线程也会消耗 100% 的可用(每核、每线程)CPU 周期。
【解决方案2】:

SetThreadPriority 将设置各个线程的优先级。或者,如您所问,您可以使用 SetPriorityClass 更改进程的基本优先级。正是这个基本优先级与线程优先级相结合,从中派生出实际的线程优先级。

【讨论】:

    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多