2009-05-18 2 views
6

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

+5

Связанный вопрос: http://stackoverflow.com/questions/150355 – macbirdie

+0

возможно дубликат [Программный найти количество ядер на машине] (http://stackoverflow.com/questions/150355/programmatically- find-the-number-of-core-on-a-machine) – sschuberth

ответ

11

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

ETA:

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

SYSTEM_INFO sysinfo; 
GetSystemInfo(&sysinfo); 

numCPU = sysinfo.dwNumberOfProcessors; 

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

+0

Только то, что Доктор приказывает, работает. Благодаря! –

2

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

0
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; 
} 
Смежные вопросы