【发布时间】:2009-02-07 07:26:10
【问题描述】:
我有一个程序,我想只在一个 CPU 上运行,这样它就不会占用太多系统资源。问题是,它调用了一个自动使用所有可用 CPU 内核的外部 DLL。我没有外部 DLL 的源代码。如何将 DLL 限制为仅使用一个 CPU?
编辑:感谢您的帮助,这是我用来限制一个 CPU (Windows) 的代码:
// Limit the process to only 1 thread so we don't chew up system resources
HANDLE ProcessHandle = GetCurrentProcess();
DWORD ProcessAffinityMask;
DWORD SystemAffinityMask;
if(GetProcessAffinityMask(ProcessHandle,&ProcessAffinityMask,&SystemAffinityMask)
&& SystemAffinityMask != 0)
{
// Limit to 1 thread by masking all but 1 bit of the system affinity mask
DWORD NewProcessAffinityMask = ((SystemAffinityMask-1) ^ SystemAffinityMask) & SystemAffinityMask;
SetProcessAffinityMask(ProcessHandle,NewProcessAffinityMask);
}
编辑:事实证明,Brannon 设置进程优先级的方法更适合我想要的,即防止进程占用资源。这是代码(Windows):
// Make the process low priority so we don't chew up system resources
HANDLE ProcessHandle = GetCurrentProcess();
SetPriorityClass(ProcessHandle,BELOW_NORMAL_PRIORITY_CLASS);
【问题讨论】:
-
我认为您混淆了您的术语。此代码将整个过程限制为单个处理器。此代码与线程无关。
-
好点,我会将术语从“线程”更改为“CPU”。
标签: c++ multithreading dll external-dependencies