掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッドに複数の引数を渡すには (ID:60437)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> チャットプログラムを作っていて切断ボタン(IDC_BUTTON3とします)を > 押したときに受信専用スレッドで終了させたいです。 これを読む限り、DATA 構造体をスレッドに常に渡す意味がないような気が。 もしかして、スレッド側でダイアログ宛の全てのメッセージを見ようと 考えていたりしませんか。であれば、根本的に止めた方がよいと思います。 あくまでダイアログのメッセージはダイアログ側で確認し、 ボタンが押された場合にその中からスレッドに通知を送ってあげる。 これだけならば、そもそもスレッドの起動引数にデータを渡す必要性も 薄いかと思います。 この場合、受信専用スレッドでは「切断用イベント」の通知をもらうだけで 切断を要求されていることがわかりますから、 WaitForMultipleObjectsや WSAWaitForMultipleObjects で、 本来の受信と、切断用イベントの両方に対して待機しておき、 待機明けの時点で、終了要求であれば終了処理を、受信であれば受信処理を、 など個別に処理すればよいように思います。 > 3の1に戻るはどうしたらいいのでしょうか?この場合必要なのでしょうか? > SetEventはどういった処理をしているのでしょうか? for や whileで。 受信スレッドという名前から想像するありがちな処理では必要なことが 多いと思いますが、必須かと云われれば「受信専用スレッド」の責務次第では。 > メインでの処理 > typeof struct data{ --snip-- > } DATA; >DATA data = CreateEvent(NULL,TRUE,FALSE,NULL); CreateEventの戻りはイベントのハンドルです。 DATAに代入などできませんし、意味がありません。MSDNを確認してください。 また、DATAを変数として確保する場合、 スレッドの当該処理完了までDATA存続を保証できるスコープにおく必要があり、 スレッド参照中に次のデータで上書きされる可能性があるなら排他制御等も 必要となります。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.