본문 바로가기
C & C++/C & C++

CPU정보 얻어오기

by izen8 2011. 11. 17.
반응형

CPU정보 얻어오기

  [ CPU정보를 얻어보자 ]
 
 

여기서는 현재 CPU종류와 프로세스갯수, 그리고 CPU가 얼마나 사용되고 있는정도를 알아보겠습니다. 첫 번째것은 단순히 함수의 호출로 알 수 있지만, 후자의 경우는 레지스트리에 저장되는 값을 사용하게 됩니다.

 
 
 

 CPU의 종류와 프로세스 개수 알기

 

먼저 CPU의 종류와 프로세스 갯수를 알아보는 방법에 대해 알아보겠습니다. 이것 역시 단순히 API함수의 호출로 알 수가 있으므로, 그냥 서술하겠습니다. 이때 사용되는 함수는 GetSystemInfo라는 함수이며, 아래와 같은 구조를 이루고 있습니다.

 

 

 

dwProcessorType

CPU의 타입(자세한 것은 위의 코드 참조)

dwNumberOfProcessors

유효한 CPU의 수

 

SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
CString str;
switch(sysInfo.dwProcessorType) {

case PROCESSOR_INTEL_386:

str="386"; break;


case PROCESSOR_INTEL_486:

str="486"; break;


case PROCESSOR_INTEL_PENTIUM:

str="Pentium"; break;


case PROCESSOR_MIPS_R4000:

str="MIPS"; break;


case PROCESSOR_ALPHA_21064:

str="ALPHA"; break;


default:

str="Don't Know"; break;

}

CString str2;
str2.Format("CPU %s가 %d개있습니다.", strCpu, sysInfo.dwNumberOfProcessors);
 

 

CPU의 사용률 알기

 

레지스트리내의 HKEY_DYN_DATA내의 KERNEL\\CPUUsage의 StartStat를 읽어들인후, 같은 방식으로 StatData를 접근하면 CPU의 사용률을 알 수 있습니다. 이런방식으로 다음과 같은 코드로 접근할 수 있습니다.

 

HKEY hKey;
DWORD dwType=REG_DWORD;
DWORD dw=4;
DWORD dwDust;
char *pszRegKey="KERNEL\\CPUUsage";
int nCPUUsing;                                                           // 이변수에 사용률이 저장됩니다.

    
::RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\\StartStat", 0, KEY_READ, &hKey);
::RegQueryValueEx(hKey, pszRegKey, 0L, &dwType, (unsigned char *) &dwDust, &dw);
::RegCloseKey(hKey);

::RegOpenKeyEx(HKEY_DYN_DATA, "PerfStats\\StatData", 0, KEY_READ, &hKey);
::RegQueryValueEx(hKey, pszRegKey, 0L, &dwType, (unsigned char *) &nCPUUsing, &dw);
::RegCloseKey(hKey);

 

 

RegOpenKeyEx : 이함수는 어떤 특정화된 key를 엽니다.

 

LONG RegOpenKeyEx

  (HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult );

 

Parameters 설명

hKey        : 다루려고하는 key값을 지정합니다.

lpSubKey : hKey값의 하위에 있는 키를 지정합니다.

ulOptions : Reserved; set to 0.

samDesired : Not supported; set to 0.

phkResult :현재 지정된 키값에 지정된 핸들 포인터를 받습니다.(사용후에는 반드시 RegCloseKey함수를 이용해서 제거해 주어야합니다.)

 

RegQueryValueEx : 이함수는 registry key에의해 연관된 값에대해, 그 타입과 데이터를 넘겨줍니다.

 

LONG RegQueryValueEx ( HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );

 

Parameters 설명

hKey           : 다루려는 킷값(여기서는 RegOpenKeyEx에서 지정해준 킷값을 씁니다.)

lpValueName : 알고싶은 쿼리값에대한 위치 포인터가 옵니다.

lpReserved : Reserved; set to NULL.

lpType        : 알고싶은 값에 대한 데이터형을 지정합니다.(자세한건 MSDN을 참고)

lpData         : 위의 인자에서 지정된 값이 저장될 포인터

lpcbData     : lpData의 버퍼크기

반응형

댓글