尽管我设置了THREAD_MODE_BACKGROUND_BEGIN,为什么我的程序仍然是资源耗费?

时间:2016-03-30 12:42:49

标签: c++ windows openmp

我的程序结构如下,这是一个巨大的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占用问题,但问题仍然存在,为什么单独的后台模式不够?

1 个答案:

答案 0 :(得分:0)

这对评论来说太长了

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

如果您想在应用内进行此操作,我们可以选择Job object。使用JOBOBJECT_CPU_RATE_CONTROL_INFORMATION对应用程序可以消耗多少CPU进行细粒度控制。 JOB与线程关联性最重要的好处是作业限制适用于整个过程到受控过程产生的任何过程。