2009-05-18 2 views
6

Windows 플랫폼에서 관리되지 않는 C++을 사용하면 호스트 컴퓨터에있는 프로세서 코어의 수를 간단하게 감지 할 수 있습니까?Windows에서 C++을 사용하는 프로세서를 계산하십시오.

+5

관련 질문 : http://stackoverflow.com/questions/150355 – macbirdie

+0

[프로그래밍 방식으로 컴퓨터에 코어의 수를 찾을] (의 중복 가능성 http://stackoverflow.com/questions/150355/programmatically- 기계의 코어 수 찾기) – sschuberth

답변

11

GetLogicalProcessorInformation을 사용하면 필요한 정보를 얻을 수 있습니다.

ETA : 주석 기가에 링크 된 질문에서 언급 한 바와 같이

가 다른 (쉬운) 방법은 그것은 GetSystemInfo를 통해 것 할 :

SYSTEM_INFO sysinfo; 
GetSystemInfo(&sysinfo); 

numCPU = sysinfo.dwNumberOfProcessors; 

당신에게 더 자세한 정보를 줄 것 GetLogicalProcessorInformation처럼 보인다, 하지만 필요한 모든 프로세서가 있다면 GetSystemInfo는 정상적으로 작동 할 것입니다.

+0

닥터의 명령에 따라 처리 할 수 ​​있습니다. 감사! –

2

내가 XP에 NUMBER_OF_PROCESSORS 변수 환경 거기에 나타났습니다,하지만 마이크로 소프트의 사이트를 찾을 수 없습니다. 그래도 이것이 가장 쉬운 방법이라고 생각합니다.

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; 
} 
관련 문제