スレッドの終了を待ってから画面を終了させる

解決


ぽむ  2005-05-13 01:52:37  No: 57369

バックグラウンドでスレッドが10個程動いているアプリ
なのですが、メインの画面から「×」or終了ボタンを押す
ことにより、確認ダイアログを表示し「はい」を押下でア
プリの終了をさせたいと考えていたのですが、

「はい」を押した瞬間にメインの画面は消えるのですが、
裏ではスレッドの終了処理を行っており、画面上を見る限
りは完全に終了したかのように見えてしまいます。

全てのスレッドが完全に終了してから画面を消去させたいと
思っているのですが、方法がわかりません。どなたか方法
を教えて頂けませんか?

環境はVC6-SP3 Win2K SDIで開発してます。
宜しくお願いします。


ゃぃゅ  2005-05-13 03:10:30  No: 57370

WaitForMultipleObjects


いおり  2005-05-13 03:17:55  No: 57371

Xボタンが押された場合、WM_CLOSE メッセージが飛んでくるので、
そこで DestroyWindow を呼ばずに全スレッドの終了命令を発行する。
で、全スレッドが終了したら改めて DestroyWindow を発行する。

というようにすればいいと思います。


ぽむ  2005-05-13 19:33:45  No: 57372

ゃぃゅさん、いおりさん回答ありがとうございます。
いおりさんの回答を参考に早速やってみました。
一応希望通りになりました・・・が、見栄えとして
変ですね。画面は消えないけどボタンとかが固まって
スレッドが終わるまでハングアップ状態な感じで・・・

別パターンになってしまいますが、メインの画面を消して
画面中央に「終了処理中です...」のダイアログ(タイトル
バーなし)を出す事って可能でしょうか?

メインが消えてるのに他のダイアログ呼べるんでしょうか?
MFC難しいです(--;画面周りは勉強しながらなので
すみませんが宜しくお願いします。


いおり  2005-05-14 00:43:44  No: 57373

自分のウィンドウを削除するのではなく、非表示にすればいいのでは?
MFCはよく分からないのですが、そうすれば普通にダイアログを
呼べるような気がします。


ぽむ  URL  2005-05-16 18:17:04  No: 57374

>いおりさん
有難うございます。自分でも色々探して「消す」んじゃなくて
「見えなくする」という事に気がつきました(^^;
一応こんな感じで出来ました。有難うございましたm(__)m

void CMainFrame::OnClose() 
{
---------中略-------------
    // 終了確認
    nMsgRtn = AfxMessageBox (MES_APP_END, MB_OKCANCEL);
    if (nMsgRtn != IDOK) {
        return;
    }

    // メインウィンドウを隠す
    this->ShowWindow(SW_HIDE);

    CEndDlg *dlg;
    dlg = new CEndDlg;
    dlg->Create(this);
    dlg->BringWindowToTop();

    delete m_thread;
    m_thread = NULL;
  
    delete dlg;

    CFrameWnd::OnClose();
    return;
}


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加