マルチスレッドの知識がないままに、プログラミングをする必要が出てしまったのですが、書籍などで調べても分からない部分があるため、質問いたします。
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で質問しましょう!
似たような質問が見つかりました
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- グループウェア slackについて取り急ぎ教えて頂きたいことがあります 2 2022/04/08 09:05
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- 倫理・人権 酔っ払いが他人にたくさん迷惑を掛けているので、もっとお酒規制を厳しくした方が良いのでは? 2 2022/04/11 11:54
- 2ちゃんねる Server relocation is in progress.って何でしょうか 1 2022/10/27 19:46
- ノートパソコン Windows11搭載パソコン 新規購入にあたって 4 2022/11/09 18:11
- Excel(エクセル) エクセル終了が遅くなった 7 2022/04/19 12:11
- 2ちゃんねる ユーチューブで2ちゃんねるのスレッド紹介とかありますが、あれは2ちゃんねるだったときにつくられたスレ 1 2022/07/21 16:48
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
メッセージキューのスレッド間通信
UNIX・Linux
-
Linuxでのスレッド間メッセージについて
C言語・C++・C#
-
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
-
4
スレッドとメッセージキューに関して
C言語・C++・C#
-
5
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
6
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
7
C++ 構造体の一括初期化 {0}
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
フォームのCheck boxとOLEObjec...
-
String a = "a"; と String b =...
-
「インスタンス」の意味をわか...
-
SQLを連続発行する時の正しい(?...
-
カンマ区切りの数値文字列を数...
-
スレッドセーフについて
-
C#のメモリ解放についてご教授...
-
外部ライブラリの動的参照によ...
-
複数の変数を宣言する時、同時...
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
private static という変数の修飾
-
C# のインスタンスの破棄
-
C# インスタンスの破棄
-
エクセルVBAで、条件に一致する...
-
「エンクロージング型」と「外...
-
EXCEL VBAにて動的にCheckBOXを...
-
同じクラスにならない確率を教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
SQLを連続発行する時の正しい(?...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
エクセル(複数インスタンス)...
-
フォームの存在をチェックする方法
-
VB6.0で、DLLを動的に参照したい
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
newしないインスタンス?実体化...
-
「インスタンス」の意味をわか...
-
SetWindowsHookExで質問
-
フィールドでのnewとコンストラ...
おすすめ情報