終了待ち

[戻る]
329 2002/09/13(金) 10:45:34
開発環境 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);

329 2002/09/13(金) 11:22:58
追加発言です。

調べていたらMsgWaitForMultipleObjects() 
がよいと書いてあったんですけど。
よく使い方が分りません。
分る方がいましたら教えて下さい。

ちる 2002/09/13(金) 11:24:48
WaitForSingleObjectの引数-dwMillisecondsを0にするとを
現在の状態を即返すみたいです。

ですので
タイマーイベントでWAIT_OBJECT_0(終了の合図)の値を返すの
を見に行くというのはどうでしょうか

ちる 2002/09/13(金) 11:29:10
あっ、終了した時の合図はこっちかもしれません

WAIT_ABANDONED

329 2002/09/13(金) 12:47:56
WaitForSingleObjectとどう違うんですか?

YuO [E-Mail] 2002/09/13(金) 12:49:39
> WaitForSingleObjectとどう違うんですか?

何と比べて,ですか?

329 2002/09/13(金) 13:11:40
WaitForSingleObject() 
と
MsgWaitForMultipleObjects() 
です。

ちる 2002/09/13(金) 13:17:00
MsgWaitForMultipleObjects() の方はどういう機能かは分からなかったんですが
329さんの作りたいものはWaitForSingleObject() 関数で十分ではないでしょうか?

WaitForSingleObject() 関数についてはMSDNに詳しい解説が載ってますよ^-^

329 2002/09/13(金) 13:27:04
ここに描画させたいなら
MsgWaitForMultipleObjects() 
をつかうと書いてあるんですけど。
↓
http://mfc.acty-net.ne.jp/ml/mfc/logTop/logAll/00015825.shtml
再描画が旨くいきません。

YuO [E-Mail] 2002/09/13(金) 14:04:23
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とタイマー使ってチェックする方が簡単だと思いますけどね。

ogmmm 2002/09/16(月) 13:58:25
スレッドにするのが簡単です。

アイススケーター 2002/09/16(月) 15:29:42
これって、ひょっとしたら起動される側のアプリケーションに
二重起動防止を行えばすむ問題じゃないんですか?

ogmmm 2002/09/16(月) 19:39:29
参考までに
こんな感じです。
http://www3.justnet.ne.jp/~ogmmm/prog.htm
最近はSDKでやってますが。

329 2002/09/17(火) 09:43:55
[[解決]]
皆さん有り難う御座いました。
新しくスレッドを作成しそのスレッドでプロセスを起動後、終了するまで待機させ
終了後メッセージを送る事でアプリケーションの終了を知るようにしました。参考までに↓
http://cgi23.plala.or.jp/a-w-h/mfc/getapend.html

古いスレッドには追加発言できません。