[Win32]Watch Dog Timer


使用しているTVアプリが起動時にハングアップする場合があるので以下の処理をスレッドで実行するようにしてみました。

while(1){
//終了イベントを確認する
if(WaitForSingleObject(m_hEventStop,0) != WAIT_TIMEOUT){
break;
}
//メインウインドウの応答を確認する
if(SendMessageTimeout(pInfo->m_hWnd,WM_NULL,0,0,SMTO_ABORTIFHUNG,500,NULL) == 0){
//ウインドウが有効かを確認する
if(IsWindow(pInfo->m_hWnd) == FALSE){
break;
}
//終了イベントを確認する
if(WaitForSingleObject(hEventStop,0) != WAIT_TIMEOUT){
break;
}
//アプリケーションを再起動する
char szPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH,&szPath[0]);
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb=sizeof(si);
CreateProcess(NULL,(LPTSTR)GetCommandLine(),NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
//プロセスを終了する
ExitProcess(0);
break;
}
}

ウインドウが応答が無かった場合に、プロセスを強制的に終了して再起動する処理を入れています。
これで問題が改善されるとうれしいのですけど・・・。

0 件のコメント :

コメントを投稿