Подсчет процессоров, использующих C++ под Windows

Используя неуправляемый C++ на платформе Windows, существует ли простой способ определить количество ядер процессора на моем хост-компьютере?

4 ответа

Решение

Вы можете использовать GetLogicalProcessorInformation для получения необходимой информации.

ETA:

Как упоминалось в вопросе, с которым связан комментатор, другой (более простой) способ сделать это будет через GetSystemInfo:

SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );

numCPU = sysinfo.dwNumberOfProcessors;

Похоже, что GetLogicalProcessorInformation предоставит вам более подробную информацию, но если вам нужно только количество процессоров, GetSystemInfo, вероятно, будет работать просто отлично.

Я заметил, что есть переменная окружения NUMBER_OF_PROCESSORS на XP, но я не смог найти его на сайте Microsoft. Я верю, что это будет самый простой способ.

Проверьте GetLogicalProcessorInformation

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;
}
Другие вопросы по тегам