C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 33 を表示中)
■16270 / )  Re[4]: CreateProcess後画面が消える
□投稿者/ とっちゃん (264回)-(2008/04/02(Wed) 11:40:37)
とっちゃん さんの Web サイト
No16265 (Blue さん) に返信

Vistaの場合のみですが
WaitForSingleObject などの待機系関数を利用するとかなり早い段階で、応答なし状態になります。
具体的にどのくらいの時間か?は計っていませんが、数秒以下(多分1秒もかからず)でその状況に
なるので、APIの呼び出しパラメータを見て状態を切り分けている可能性があります。

Timeout=0の場合は、即座にリターンするので問題はありませんが、そうではない場合その間は
絶対にメッセージを処理しなくなることが、OSレベルで保証できるので
結果として応答しない状態になり、応答なしという表示がなされるのだと思います。

抜本的な対策は、MsgWaitForMultipleObjects を使ったメッセージループにしてそこで待機する
という形になりますが、この場合MFCのコアルーチンにテコ入れすることになるためかなり難易度の高い手術になります。
#なにせ心臓交換ですから...w

割と楽な実装としては、タイマーで定期的にWaitForSingleObject か GetExitCodeProcess を呼び出すかになりますね。

他には、待機処理そのものを別スレッドにしておき、そのスレッドで
終了チェック(こちらは、INFINITE でやっても応答なしにはならない)し、終了が検出できたら
メインスレッド側にメッセージをポストするというやり方もあります。

返信 編集キー/


管理者用

- Child Tree -