|
서버 감시 프로그램을 작성중인데요..
포럼에 IsHungAppWindow 함수나 SendMessageTimeout이걸 사용해서
지금 서버의 상태를 체크를 하는데요.
테스트를 할려고 서버를 무한루프에 빠뜨려 보았습니다.
이 상태에서는 저기 위에 두방법으로 체크가 정확히 되지 않는것같아서 문의드립니다.
포럼에 장성호 님이 게시한 글을 토대로 핸들값만 받아왔는데요.
void __fastcall TfrmMain::TimerTimer(TObject *Sender)
{
Timer->Enabled = false;
HWND hWnd = FindWindow(NULL, strServername.c_str());
GetWindowThreadProcessId(hWnd, &ProcessId); // hWnd로 프로세스 ID를 얻음..
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, ProcessId);
typedef BOOL (*TIsHungAppWindow)(HWND);
TIsHungAppWindow func;
HWND hUser32=GetModuleHandleA("user32.dll");
func=(TIsHungAppWindow)GetProcAddress(hUser32,"IsHungAppWindow");
if(func(hProcess))
{
ShowMessage("응답없음 상태 ");
StartServer->Enabled = true; //서버 재시작타이머 입니다.
}
else
{
ShowMessage("정상 실행중 ");
}
Timer->Enabled = true;
}
소스는 이런식으로 작성하엿는데 "정상실행중"이 계속 찍히네요.
그리고 추가로 서버가 동작중에 윈도우 에러가 찍히면서 멈춰버린 경우도 체크가 가능한가요??
|