У меня есть программа, которую я хотел бы запустить только на одном процессоре, чтобы она не занимала слишком много системных ресурсов. Проблема в том, что он делает вызов во внешнюю DLL, которая автоматически использует все доступные ядра ЦП. У меня нет исходного кода для внешней DLL. Как я могу ограничить DLL только одним процессором?
РЕДАКТИРОВАТЬ: Спасибо за помощь, вот код, который я использовал для ограничения до одного процессора (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);
}
РЕДАКТИРОВАТЬ: Оказывается, подход Брэннона по установлению приоритета процесса работает даже лучше для того, что я хочу, а именно, чтобы процесс не занимал ресурсы Вот этот код (Windows):
// Make the process low priority so we don't chew up system resources
HANDLE ProcessHandle = GetCurrentProcess();
SetPriorityClass(ProcessHandle,BELOW_NORMAL_PRIORITY_CLASS);