2009-05-18 11 views
6

Utilizzando C++ non gestito su una piattaforma Windows, esiste un modo semplice per rilevare il numero di core del processore della macchina host?Conta processori che usano C++ sotto Windows

+5

questione connessa: http://stackoverflow.com/questions/150355 – macbirdie

+0

possibile duplicato di [programmazione trovare il numero di core su una macchina] (http://stackoverflow.com/questions/150355/programmatically- find-the-number-of-core-on-a-machine) – sschuberth

risposta

11

È possibile utilizzare GetLogicalProcessorInformation per ottenere le informazioni necessarie.

ETA:

Come accennato nella domanda un commentatore collegato ad un altro modo (più facile) per farlo sarebbe via GetSystemInfo:

SYSTEM_INFO sysinfo; 
GetSystemInfo(&sysinfo); 

numCPU = sysinfo.dwNumberOfProcessors; 

Sembra come GetLogicalProcessorInformation darebbe informazioni più dettagliate, ma se tutto ciò di cui hai bisogno è il numero di processori, GetSystemInfo probabilmente funzionerebbe perfettamente.

+0

Proprio quello che l'ordine del medico, funziona a meraviglia. Grazie! –

2

ho notato c'è una variabile di ambiente NUMBER_OF_PROCESSORS su XP, ma non ho potuto trovare sul sito di Microsoft. Credo che questo sarebbe il modo più semplice, però.

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; 
} 
Problemi correlati