为什么即使我设置了THREAD_MODE_BACKGROUND_BEGIN,我的程序仍然占用资源
Why is my program a resource hog even though I set 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>
可以以较低的优先级运行任何任意进程,无需修改源代码。
如果你想在应用程序中完成,一个更好的选择是给我们一个Job对象。使用JOBOBJECT_CPU_RATE_CONTROL_INFORMATION
对应用程序可以消耗的CPU数量进行细粒度控制。job与线程亲和性相比,最重要的好处是作业限制适用于整个进程,适用于受控进程派生的任何进程。
相关文章:
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么我的 IExtractIcon 处理程序没有被调用?
- 为什么我的程序在for循环中k=0时返回垃圾值
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 我的程序没有从文件中读取并输入数据
- 我的评分程序无法正常工作
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 反向功能超出了我的 cpp 程序的范围
- 我的二进制搜索程序只是关闭了
- 为什么我的程序不能显示斐波那契级数?
- 为什么我的程序在使用预留后没有加速?
- 为什么如果我添加这一行,我的程序会不断询问值
- 为什么当我输入较大的数字时,我的程序会到达文件末尾?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- C++机器人程序(我的私人服务器)出现问题
- 用C++创建一个写作应用程序(我的第一个项目)(学习C++)