いろいろ調べてもわかりません
一応ヘルプなどを見て下のようなソースを書いてみたんですが
何か間違っているでしょうか・・・
この場合ですとスレッドの完了を待たずにメッセージボックスが出てきます
(つまり待ってない)
HANDLE test = AfxBeginThread(ThreadTest,(LPVOID)1,THREAD_PRIORITY_NORMAL);
WaitForSingleObject(test,INFINITE);
AfxMessageBox(aaa);
AfxBeginThread()が返すのはCWinThread*ですよ
これで解決できるかな?
WaitForSingleObjectの戻りを確認すれば、
状況がするにわかるはずです。
CWinThread::m_hThreadを使えば、
WaitForSingleObjectはOKなのかしら?(やったことない)
CWinThread* test = AfxBeginThread(ThreadTest,(LPVOID)1,THREAD_PRIORITY_NORMAL);
WaitForSingleObject(test->m_hThread,INFINITE);
AfxMessageBox(aaa);
有難うございます!
解決できました!
-----
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);
-----
いや回りくどいコードで・・・。