マルチスレッドの知識がないままに、プログラミングをする必要が出てしまったのですが、書籍などで調べても分からない部分があるため、質問いたします。
Win32APIを用いて(MFCは使用しない)、WindowsでVC7.0環境です。
やりたいことは、
スレッドAとスレッドBを生成し、
スレッドAの終了時点で、スレッドBがスレッドA内部で生成したクラスのインスタンスを取得するというものです。(もしくはその逆)
スレッドAとB自体もクラスで構成しており、内部で生成されるインスタンスはグローバルではないため、スレッドBからスレッドAを見えるような仕組みが必要なのでしょうか??
まだイメージだけの段階で、ソースコードで表現できなくて申し訳ないのですが、簡単にご教授くださる方、もしくは参考になるサイトを教えてくださる方がいらっしゃいましたら、お願いいたします!
No.5ベストアンサー
- 回答日時:
スレッド間でデータ(メモリ空間)は共有されます。
なので,
どのスレッドからも,同じようにデータにアクセスできます。
goopon さんの質問内容は,スレッド間というよりも,クラスのインスタンス間でのデータ交換になると思います。
クラス Y のインスタンス y で生成したデータを,
クラス X のインスタンス x で使いたければ,
例えば,x の生成時に y へのポインタを渡しておいて,それを使って,y のメンバ関数を呼び出したりしますよね?
これは,マルチスレッドでも,シングルスレッドでも同じことです。
ただし,気をつけないといけないのは,
スレッド A から y のメンバ関数を呼び出すと,スレッド A で処理が行われ,
スレッド B から y のメンバ関数を呼び出すと,スレッド B で処理が行われるということです。
つまり,A と B から同時に y のメンバ変数を書き換えたり,
A が読んでいる最中に B が書き込んだりといったことが起こり得ます。
こうなると,データの整合性が取れなくなる恐れがあるので,
スレッド間の同期を取ったり(排他制御をしたり)する必要があります。
回答ありがとうございます。
>スレッド間の同期を取ったり(排他制御をしたり)する必要があります。
これが肝ですね。この辺の知識もない状態なので、勉強しながら試していきたいと思います。
No.4
- 回答日時:
No.3
- 回答日時:
#2です。
やっていることは#1様と同じです。ただ、こういうのっていろんな人がやっているので先人がパターンとして残してあるよ,あるから(1から実装せずに)そのままコピーしたらどうですか?と言っています。No.1
- 回答日時:
実現できるかどうかは分かりませんが、まずスレッド間でデータを交換する為のグローバル変数(後々使う事を考えて配列にした方がいいかも)を用意し、staticでそのクラスのインスタンスを確保するようにして(staticにしないとスレッドから抜けた時点で、データが開放されてしまう)そして、さっきのスレッド間でデータを交換する為のグローバル変数に、そのスレッドBに渡したいインスタンスのアドレスを入れてみてはいかがでしょうか。
ちなみにこれは実際にやっていないので成功するかどうかは分かりません
この回答への補足
早速の回答ありがとうございます!
グローバル変数を使用するなら、なんとなくイメージできます。この方法が一般的なんでしょうかね??
できればグローバル変数を使用せずに済ませたいのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
Linuxでのスレッド間メッセージについて
C言語・C++・C#
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
スレッドとメッセージキューに関して
C言語・C++・C#
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0で、DLLを動的に参照したい
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
インスタンスを同じ名前で作成...
-
C#のメモリ解放についてご教授...
-
変数名の付け方
-
C#「オブジェクト参照が必要で...
-
javaのメソッドの受け渡しについて
-
private static という変数の修飾
-
AVAudioPlayer インスタン
-
クラスインスタンスとクラス型...
-
スレッドセーフについて
-
Dimensionクラスの使い方
-
Haskell
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
VB.NETでのnothing の意義について
-
(vba)他のアプリケーションの右...
-
同じクラスにならない確率を教...
-
エクリプス コンテンツアシスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
オブジェクト参照がオブジェク...
-
C# インスタンスの破棄
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
「インスタンス」の意味をわか...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
C#「オブジェクト参照が必要で...
-
javaのクラスの作り方、エラー...
-
SQLを連続発行する時の正しい(?...
-
他のファイルの変数参照
-
文字列を日付に変換でParseExce...
-
インスタンスを同じ名前で作成...
-
[Visual C#] 優先される処理に...
-
newしないインスタンス?実体化...
おすすめ情報