Подсчет процессоров, использующих C++ под Windows
Используя неуправляемый C++ на платформе Windows, существует ли простой способ определить количество ядер процессора на моем хост-компьютере?
4 ответа
Решение
Вы можете использовать GetLogicalProcessorInformation для получения необходимой информации.
ETA:
Как упоминалось в вопросе, с которым связан комментатор, другой (более простой) способ сделать это будет через GetSystemInfo:
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
numCPU = sysinfo.dwNumberOfProcessors;
Похоже, что GetLogicalProcessorInformation предоставит вам более подробную информацию, но если вам нужно только количество процессоров, GetSystemInfo, вероятно, будет работать просто отлично.
Я заметил, что есть переменная окружения NUMBER_OF_PROCESSORS
на XP, но я не смог найти его на сайте Microsoft. Я верю, что это будет самый простой способ.
size_t getProcessorCores()
{
DWORD process, system;
if(GetProcessAffinityMask(GetCurrentProcess(), &process, &system))
{
int count = 0;
for(int i = 0; i < 32; i++)
if(system & (1 << i))
count++;
return count;
}
// may be we hav't PROCESS_QUERY_INFORMATION access right
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
return sysinfo.dwNumberOfProcessors;
}
size_t getAvailableProcessorCores()
{
DWORD process, system;
if(GetProcessAffinityMask(GetCurrentProcess(), &process, &system))
{
int count = 0;
for(int i = 0; i < 32; i++)
if(process & (1 << i))
count++;
return count;
}
// may be we hav't PROCESS_QUERY_INFORMATION access right
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
return sysinfo.dwNumberOfProcessors;
}