Подсчет процессоров с использованием C ++ под Windows - PullRequest
6 голосов
/ 18 мая 2009

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

Ответы [ 4 ]

12 голосов
/ 18 мая 2009

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

ETA:

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

SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );

numCPU = sysinfo.dwNumberOfProcessors;

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

2 голосов
/ 18 мая 2009

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

0 голосов
/ 07 июня 2013
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;
}
0 голосов
/ 18 мая 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...