为什么我的程序是一个资源猪,即使我设置THREAD_MODE_BACKGROUND_BEGIN?

我有一个程序结构如下,这是一个巨大的CPU猪。 IO减慢整个系统,我几乎不能移动鼠标指针…

…为什么? 我以为THREAD_MODE_BACKGROUND_BEGIN应该阻止这个?

#pragma omp parallel { SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN); #pragma omp for for (...) { doTruckLoadsOfComputation(); if (omp_get_thread_num()==0) doTinyAmountOfIO(); //progress indicator } SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END); } 

更新:

添加SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL); 修复CPU的霸道问题,但问题仍然存在,为什么不是背景模式本身足够?

这太长了评论

你有更简单的选择: START /BELOWNORMAL <yourexe>可以以较低优先级运行任意进程,而START /BELOWNORMAL <yourexe>修改源代码。

如果你想从应用程序中做到这一点,更好的选择是给我们一个Job对象 。 使用JOBOBJECT_CPU_RATE_CONTROL_INFORMATION细粒度地控制你的应用可以消耗多少CPU。 作业与线程亲和力的最重要的好处是作业限制适用于整个过程以及由受控过程产生的任何过程。