開発環境 VC6.0 WIN NT4.0 MFC
外部アプリケーションを起動して。そのアプリの終了を待つとゆう事をやっているんですけど
WaitForSingleObject(pi.hProcess,INFINITE);
のところで起動したアプリが終了するまで待つとゆう処理があって。
ここで終了待機。になってしまいます。
私がやりたい事は。アプリを起動したらボタンを無効にして。
アプリが終了したらボタンを有効にする。ということです。
終了を待っている間も他の処理は続けたいんですけど
WaitForSingleObject(pi.hProcess,INFINITE);
の所で終了を待っているので先に進みません。
なにか良い方法はありませんか?
ソースコード
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
CreateProcess(NULL,RIRE_SOUTI,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
m_btn1.EnableWindow(FALSE); //ボタン無効
//閉じられるまで待つ
WaitForSingleObject(pi.hProcess,INFINITE);
m_btn1.EnableWindow(TRUE); //ボタン有効
//プロセスハンドルを開放
CloseHandle(pi.hProcess);
追加発言です。
調べていたらMsgWaitForMultipleObjects()
がよいと書いてあったんですけど。
よく使い方が分りません。
分る方がいましたら教えて下さい。
WaitForSingleObjectの引数-dwMillisecondsを0にするとを
現在の状態を即返すみたいです。
ですので
タイマーイベントでWAIT_OBJECT_0(終了の合図)の値を返すの
を見に行くというのはどうでしょうか
あっ、終了した時の合図はこっちかもしれません
WAIT_ABANDONED
WaitForSingleObjectとどう違うんですか?
> WaitForSingleObjectとどう違うんですか?
何と比べて,ですか?
WaitForSingleObject()
と
MsgWaitForMultipleObjects()
です。
MsgWaitForMultipleObjects() の方はどういう機能かは分からなかったんですが
329さんの作りたいものはWaitForSingleObject() 関数で十分ではないでしょうか?
WaitForSingleObject() 関数についてはMSDNに詳しい解説が載ってますよ^-^
ここに描画させたいなら
MsgWaitForMultipleObjects()
をつかうと書いてあるんですけど。
↓
http://mfc.acty-net.ne.jp/ml/mfc/logTop/logAll/00015825.shtml
再描画が旨くいきません。
MsgWaitForMultipleObjectsのヘルプ
http://www.microsoft.com/japan/msdn/library/ja/jpdllpro/html/_win32_msgwaitformultipleobjects.asp
とか,WaitForSingleObjectのヘルプ
http://www.microsoft.com/japan/msdn/library/ja/jpdllpro/html/_win32_waitforsingleobject.asp
とかは読みましたか?
MsgWaitForMultipleObjects使うよりも,ちるさんが書かれているように,
WaitForSingleObjectとタイマー使ってチェックする方が簡単だと思いますけどね。
スレッドにするのが簡単です。
これって、ひょっとしたら起動される側のアプリケーションに
二重起動防止を行えばすむ問題じゃないんですか?
皆さん有り難う御座いました。
新しくスレッドを作成しそのスレッドでプロセスを起動後、終了するまで待機させ
終了後メッセージを送る事でアプリケーションの終了を知るようにしました。参考までに↓
http://cgi23.plala.or.jp/a-w-h/mfc/getapend.html