2009-05-18 18 views
6

Al usar C++ no administrado en una plataforma Windows, ¿hay una manera simple de detectar la cantidad de núcleos de procesador que tiene mi máquina host?Procesadores de recuento usando C++ en Windows

+5

pregunta relacionada: http://stackoverflow.com/questions/150355 – macbirdie

+0

posible duplicado de [programación encontrar el número de núcleos en una máquina] (http://stackoverflow.com/questions/150355/programmatically- find-the-number-of-cores-on-a-machine) – sschuberth

Respuesta

11

Puede usar GetLogicalProcessorInformation para obtener la información que necesita.

ETA:

Como se mencionó en la pregunta de un comentarista ligado a, otra manera (más fácil) para hacerlo sería a través de GetSystemInfo:

SYSTEM_INFO sysinfo; 
GetSystemInfo(&sysinfo); 

numCPU = sysinfo.dwNumberOfProcessors; 

parece que GetLogicalProcessorInformation le daría información más detallada, pero si todo lo que necesitas es la cantidad de procesadores, GetSystemInfo probablemente funcionará bien.

+0

Justo lo que ordena el Doctor, funciona de maravilla. ¡Gracias! –

2

me he dado cuenta de que hay una variable de entorno NUMBER_OF_PROCESSORS en XP, pero no pude encontrar en el sitio de Microsoft. Creo que esta sería la forma más fácil, sin embargo.

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; 
} 
Cuestiones relacionadas