![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_16.png?e8efa67)
スレッドについて勉強中なのですが、簡単なスレッド作り、
スレッドの処理が終わってからメインの処理を行わせたくて
以下のようなプログラムを書いてみました。
そこで、WaitForSingleObjectを使ってスレッドが終了するのを
待ちたいのですが、WaitForSingleObjectではまってしまうようで
sprintfのメッセージ(スレッドが止まってしまっている)が
表示されません。
WRITE関数の処理が終われば、、WaitForSingleObjectで処理が
戻ってくると考えているのですが…。
スレッドについてと、間違いについて教えてもらえないでしょうか?
宜しくお願いします。
main
{
if(!stop)
{
File = CreateFile(...);
g_hThead = CreateThread(NULL,0,WRITE,(LPVOID)NULL,0,NULL);
g_stop = false;
}else
{
g_stop = true;
::WaitForSingleObject(g_hThead, INFINITE);
CloseHandle(File);
CloseHandle(hThead );
}
}
void WRITE()
{
while(!g_stop)
{
WriteFile(...);
}
...処理を行う
sprintf("スレッドを終了します。")
}
No.1ベストアンサー
- 回答日時:
まず、上に日本語で書かれているようなロジックになっていません。
main関数の最初のif文(if(!stop))で、
thenのとき スレッド生成
※g_stopがtrueにならないので、スレッド内で無限ループ
elseのとき スレッドの終了を待つ(WaitForSingleObject)
※スレッドは生成されていない
となっています。
上の問題が解決しても、まだ他の問題が出てきそうですが。。。
この回答への補足
すみません…書き間違いです。
正確にはメインではなく、ボタンが押された場合なので
一度目にボタンが押されたら stop = false
二度目にボタンが押されたら stop = true になります。
if文も間違えてしまっています。すみません。
No.2
- 回答日時:
#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. …
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 2ちゃんねる Server relocation is in progress.って何でしょうか 1 2022/10/27 19:46
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP isset — 変数が宣言されていること、そして null とは異なることを検査 1 2022/03/27 17:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同一スレッドで、ロックをかけ...
-
スレッドの監視方法について
-
VC++スレッドの正しい終了のさ...
-
Windows上で、シグナル(SIGTERM...
-
MFCマルチスレッドについて
-
Win32APIでのスレッド処理
-
CWnd::OnTimerのスレッドの取得
-
他のAppのIMEを終了させるには
-
volatile の使い方
-
.NetのBackgroundWorkerクラス...
-
Linuxでスレッド優先度って変え...
-
VB2005 シリアル通信のClose処理
-
マルチスレッド:スレッドの終...
-
msec単位のWait Timerが作れない!
-
マルチスレッドについて
-
LinuxでDoEvents()同等機能
-
スレッドについて
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
緯度、経度の 10進法と 60進法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
スレッドの安全な終了のさせ方
-
Windows上で、シグナル(SIGTERM...
-
マルチスレッドプログラミング...
-
スレッドの終了の仕方
-
スレッドにて同一メモリの書き...
-
VB2005 シリアル通信のClose処理
-
スレッドの終了はどうやるんで...
-
スレッドでWM_TIMERを受け取れない
-
同一スレッドで、ロックをかけ...
-
マルチスレッドのスレッド数を...
-
WaitForMultipleObjectのイベン...
-
MFC通信プログラムマルチスレッ...
-
pthread_cond_wait 取りこぼし?
-
【VC++6.0(MFC)】スレッドの呼...
-
待機関数(WaitForMultipleObjec...
-
LinuxでDoEvents()同等機能
-
CWnd::OnTimerのスレッドの取得
おすすめ情報