MFC(C++) CPU, Memory 체크 질문있습니다.
조회수 1295회
1번 프로그램(ex: Test 프로그램)을 실행시킨상태로 두고(단지 CPU 상태, Memory 상태 변화를위한)
2번 프로그램 (ex: check 프로그램)을 실행해서
감시(check)할 프로그램을 1번 프로그램으로 선택하고
1번 프로그램의 현재시각, CPU 상태, Memory 상태를 1초마다
2번 프로그램 List controll(View: Report)에 값을 Display해주고
*.txt파일로 로그를 남기는 프로그램을 제작할려고합니다.
실직적으로 구현할려고하니 감이 오지않아서
이런 기능이 가능한지,
어떤식으로 코딩해야하는지 조언 부탁드립니다.
// ----------------------------------------------------------------------------------------------------------------------------------------------//
추가로 몇가지 질문이있습니다.
거의다 구현한 상태인데 CPU 상태 체크부분에서 막히는부분이있어서 글올립니다.
double CCheckUtilDlg::getCPU()
{
FILETIME ftime, fsys, fuser;
ULARGE_INTEGER now, sys, user;
double percent;
GetSystemTimeAsFileTime(&ftime);
memcpy(&now, &ftime, sizeof(FILETIME));
GetProcessTimes(self, &ftime, &ftime, &fsys, &fuser);
memcpy(&sys, &fsys, sizeof(FILETIME));
memcpy(&user, &fuser, sizeof(FILETIME));
**percent = (sys.QuadPart - lastSysCPU.QuadPart) + (user.QuadPart - lastUserCPU.QuadPart);**
**percent /= (now.QuadPart - lastCPU.QuadPart);**
**percent /= numProcessors;**
lastCPU = now;
lastUserCPU = user;
lastSysCPU = sys;
return percent * 100;
}
percent 계산부분에서
" warning C4244: '=' : 'ULONGLONG'에서 'double'(으)로 변환하면서 데이터가 손실될 수 있습니다. "
warning 해결방안과 percent 부분의 계산식이 올바른것인지
(첫줄 계산값이 거의 0이고 0이된 percent값은 또 나누면
-1.#IND000000000000 이런값이 Display됩니다.)
마지막으로
계산식으로 계산된값이 빨간 네모로 표시된 평균 CPU 값인건지 궁금합니다.
아니라면 평균CPU값을 읽어오는 방법이 있다면 어떻게 하는것인지 궁금합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
우선 특정 프로세스의 CPU 및 Memory 상태를 Get 하는 방안이 필요하군요.
하나씩 풀어보도록 하죠.
먼저 CPU 및 Memory 상태를 얻는 방법은 WinAPI와 PDH를 이용하면 얻을 수 있습니다. 이 부분은 조금만 검색하면 바로 나오니 따로 적진 않겠습니다.
아래 링크를 참조하시면 도움이 되시겠네요. 현재 프로세스의 CPU / Memory 상태를 얻어오는 방법이 나와있습니다.
우리가 원하는 것은 특정 프로세스의 상태정보기 때문에 GetCurrentProcess()로 얻은 현재 Process의 Handle 대신에 1번프로그램의 Process Handle을 알아야 위 링크에 있는 API로 상태정보를 Get할 수 있겠네요.
이 부분도 검색하시면 다양한 방법이 있는데 우선 아래 링크를 참조하시면 원하는 프로세스 핸들을 얻을 수 있습니다.
이제 위 내용을 바탕으로 해서 1초 단위로 loop 를 돌면서 CPU / Memory 상태를 얻은 후 listview 및 file 에 기록하도록 구현하시면 됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력