■16270 / ) |
Re[4]: CreateProcess後画面が消える |
□投稿者/ とっちゃん (264回)-(2008/04/02(Wed) 11:40:37)
|
■No16265 (Blue さん) に返信
Vistaの場合のみですが WaitForSingleObject などの待機系関数を利用するとかなり早い段階で、応答なし状態になります。 具体的にどのくらいの時間か?は計っていませんが、数秒以下(多分1秒もかからず)でその状況に なるので、APIの呼び出しパラメータを見て状態を切り分けている可能性があります。
Timeout=0の場合は、即座にリターンするので問題はありませんが、そうではない場合その間は 絶対にメッセージを処理しなくなることが、OSレベルで保証できるので 結果として応答しない状態になり、応答なしという表示がなされるのだと思います。
抜本的な対策は、MsgWaitForMultipleObjects を使ったメッセージループにしてそこで待機する という形になりますが、この場合MFCのコアルーチンにテコ入れすることになるためかなり難易度の高い手術になります。 #なにせ心臓交換ですから...w
割と楽な実装としては、タイマーで定期的にWaitForSingleObject か GetExitCodeProcess を呼び出すかになりますね。
他には、待機処理そのものを別スレッドにしておき、そのスレッドで 終了チェック(こちらは、INFINITE でやっても応答なしにはならない)し、終了が検出できたら メインスレッド側にメッセージをポストするというやり方もあります。
|
|