処理を中断させたいです。

[戻る]
mizuno 2005/06/13(月) 17:26:38
VC++6.0 MFC WindowsXP sp2

検索処理を行っている最中に処理を中断したいのですが、
実際にボタンを押すと落ちてしまいます。

IDC_EDIT_SEARCH_FILENAME で定義しているボタンを押下したときの処理を
中断したいです。

void XXXXXView::OnBtnStopSelected() 
{
    // 検索中止処理
    CWnd* pEditWnd = GetDlgItem( IDC_EDIT_SEARCH_FILENAME );
    pEditWnd->PostMessage( WM_CLOSE, 0, 0);
}

RAPT 2005/06/13(月) 20:29:11
検索処理って一体何の?

IDC_EDIT_SEARCH_FILENAME って何のコントロールですか?
名前だけ見ると EditBox 、でもボタンっていうからには Button か CheckBox か。
でも実際に呼んでいるのは CWnd 。さ〜っぱり分かりませんて。

何の話かよく分かりませんが、通常、正しい手段で処理を終了させずに強制終了
(この場合Windowの破棄?)を行なうと何が起こるか分かりません。

reshia 2005/06/14(火) 02:08:56
つまり、
1)何か(ファイル?)の検索を行うプログラムです
2)IDC_EDIT_SEARCH_FILENAMEボタンを押すと検索が開始されます
3)途中で「中断」ボタンを押すことで
  検索を(一時)停止することができます(OnBtnStopSelected()が呼ばれる)
とやりたかったのだけれど、
検索を止める(pEditWnd->PostMessage( WM_CLOSE, 0, 0);)と
プログラム自体が落ちます。

ってことでしょうか。
WM_CLOSEを何故送るのかがそもそも疑問(私が知らないだけ?)。
WM_CLOSEを送ったら、プログラムが落ちるのは当たり前じゃ??

検索を止めたいなら、何かしらのループ中で、
検索キャンセルのメッセージが来たかどうかを常に監視する
というようなことをやればいいんだと思うけど。
# もちろんスレッドは必要。
# メッセージっていっても、boolで十分。

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