システム リソースをあまり消費しないように、1 つの CPU だけで実行したいプログラムがあります。問題は、使用可能なすべての CPU コアを自動的に使用する外部 DLL を呼び出すことです。外部 DLL のソース コードがありません。DLL が 1 つの CPU のみを使用するように制限するにはどうすればよいですか?
編集:助けてくれてありがとう、これは私が1つの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);