スレッドの超難問 スレッドで分岐した処理の中でダイアログを閉じるとエラーになる – 固定ページ 2 – プログラミング – Home

スレッドの超難問 スレッドで分岐した処...
 
通知
すべてクリア

[解決済] スレッドの超難問 スレッドで分岐した処理の中でダイアログを閉じるとエラーになる

固定ページ 2 / 2

dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

ダイアログに送りたいのだから、
pDlg->PostMessage(WM_CLOSE);
では?


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> AfxGetMainWnd()->PostMessage(WM_CLOSE);

メインウィンドウに WM_CLOSE を送れば、
普通のWindowsアプリがデフォルトで終わるのは当然かと。

メッセージの送り先はダイアログにするべきだと思います。
また、別にWM_CLOSE である必要もないので独自メッセージでもかまいません。
ダイアログがそのメッセージを受け取ったときに自壊できればいいだけです。


返信引用
村田製
 村田製
(@村田製)
ゲスト
結合: 19年前
投稿: 9
Topic starter  

みなさんありがとうございました。
一人で考えていたら絶対に出来なかったと思います。
感謝しています。

以下が最終のソースになります。

XXXXDlg::XXXXDlg( CWnd* pParent /*=NULL*/)
: CDialog(XXXXDlg::IDD, pParent)
{
}

BOOL XXXXDlg::OnInitDialog()
{
CDialog::OnInitDialog();

SetTimer(ID_TIMER, 100, NULL);//0.1秒の設定 <<===追加
  EndFlg = FALSE;<<===追加

m_thread = AfxBeginThread( DeleteFunc, this, THREAD_PRIORITY_NORMAL);

return FALSE;
}

void XXXXDlg::OnDlgEnd(){

EndFlg = TRUE;<<---追加
}

static UINT DeleteFunc( LPVOID pParam)
{
XXXXDlg* pDlg = (XXXXDlg*)pParam;

for( int i = 0; i < FullPath.size(); i++ ){
処理

}

pDlg->ShowWindow(FALSE);
pDlg->OnDlgEnd();
return 0;
}

//
void XXXXDlg::OnTimer( UINT nIDEvent ){

if(EndFlg == TRUE){
EndDialog(IDCANCEL);
}
CDialog::OnTimer(nIDEvent);
}


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました