- ベストアンサー
スレッドの処理を待つ方法について
- 簡単なスレッド作り、スレッドの処理が終わってからメインの処理を行わせるため、WaitForSingleObjectを使ってスレッドの終了を待ちたいが、うまく動作しない
- WRITE関数の処理が終わったらWaitForSingleObjectで処理が戻ってくると考えているが、表示されないエラーメッセージで問題が発生している
- スレッドについて勉強中で、正しい方法や間違いを教えてほしい
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、上に日本語で書かれているようなロジックになっていません。 main関数の最初のif文(if(!stop))で、 thenのとき スレッド生成 ※g_stopがtrueにならないので、スレッド内で無限ループ elseのとき スレッドの終了を待つ(WaitForSingleObject) ※スレッドは生成されていない となっています。 上の問題が解決しても、まだ他の問題が出てきそうですが。。。
その他の回答 (1)
- yuu_yuu
- ベストアンサー率41% (34/81)
#1です。 >一度目にボタンが押されたら stop = false >二度目にボタンが押されたら stop = true になります。 そうでしたか!! >if文も間違えてしまっています。 提示されているロジックには、if文一つしかありませんが、そこ以外のif文が間違えていたのでしょうか?? 後少し気になったのが、 g_hThead = CreateThread(NULL,0,WRITE,(LPVOID)NULL,0,NULL); g_stop = false; ↓ g_stop = false; g_hThead = CreateThread(NULL,0,WRITE,(LPVOID)NULL,0,NULL); にした方が良いと思います。
補足
指摘の通りそれは一度目は初期化しているの問題になりませんが 2度目以降は問題になるところだと思います。 ご指摘ありがとうございました。 VC関係の掲示板のサイトにも質問を記入してしまいましたので、 一箇所に纏める意味とマナーが悪いということもあってそちらに移りたいと思います。 http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200803/08030079.txt 回答ありがとうございました。
補足
すみません…書き間違いです。 正確にはメインではなく、ボタンが押された場合なので 一度目にボタンが押されたら stop = false 二度目にボタンが押されたら stop = true になります。 if文も間違えてしまっています。すみません。