WaitForSingleObjectの使い方 – プログラミング – Home

通知
すべてクリア

[解決済] WaitForSingleObjectの使い方


ctkt
 ctkt
(@ctkt)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

いろいろ調べてもわかりません
一応ヘルプなどを見て下のようなソースを書いてみたんですが
何か間違っているでしょうか・・・
この場合ですとスレッドの完了を待たずにメッセージボックスが出てきます
(つまり待ってない)

HANDLE test = AfxBeginThread(ThreadTest,(LPVOID)1,THREAD_PRIORITY_NORMAL);
WaitForSingleObject(test,INFINITE);
AfxMessageBox(aaa);


引用未解決
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

AfxBeginThread()が返すのはCWinThread*ですよ
これで解決できるかな?


返信引用
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 22年前
投稿: 90
 

WaitForSingleObjectの戻りを確認すれば、
状況がするにわかるはずです。

CWinThread::m_hThreadを使えば、
WaitForSingleObjectはOKなのかしら?(やったことない)


返信引用
ctkt
 ctkt
(@ctkt)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

CWinThread* test = AfxBeginThread(ThreadTest,(LPVOID)1,THREAD_PRIORITY_NORMAL);
WaitForSingleObject(test->m_hThread,INFINITE);
AfxMessageBox(aaa);

有難うございます!
解決できました!


返信引用
MASATO
 MASATO
(@MASATO)
ゲスト
結合: 23年前
投稿: 53
 

-----
CWinThread* test = AfxBeginThread(ThreadTest,(LPVOID)1,THREAD_PRIORITY_NORMAL);
WaitForSingleObject(test->m_hThread,INFINITE);
AfxMessageBox(aaa);
-----

AfxBeginThreadで生成したインスタンスは、スレッド終了時に自爆(delete this)されますよ
ね。
ということは、AfxBeginThread呼び出し後、すぐにスレッドが終了した場合、
WaitForSingleObject実行前の中で
delete thisが呼ばてtestが指し示すインスタンスが削除されることもありえるはずです。
ということはtestが指し示す先は不定になって、
WaitForSingleObjectに渡すはずのtest->m_hThreadの値も不定、なんてこともあるはずで
す。
(もっとも実際にこの現象を起こすのは難しいとは思います。)

というわけでこのコードは安全が保証できなさそうな気がするのですが、いかがでしょうか。
あまり気にしないで良いものなんですかねー

参考までに安全そうに思っているコードを書いておきます。
-----
CWinThread* test = AfxBeginThread(ThreadTest,(LPVOID)1,THREAD_PRIORITY_NORMAL,
0, CREATE_SUSPENDED);
test->m_bAutoDelete = FALSE;
test->ResumeThread();
WaitForSingleObject(test->m_hThread,INFINITE);
delete test;
AfxMessageBox(aaa);
-----
いや回りくどいコードで・・・。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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