OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

スレッド処理内の変数の参照について

  • すぐに回答を!
  • 質問No.149000
  • 閲覧数236
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 24% (17/70)

大変困ってます。
今、親プロセスからスレッド内の変数に設定したいのですが方法がわかりません。
スレッドからの場合、普通行えばいいのでわかるのですが
・・・。

(詳細)
メインプロセス(A)
クリエートスレッド後のスレッド(B)
 1.(A)で(B)をCreateThread
 2.(A)の本処理で(B)の構造体にmemcpyの方法が
   わかりません。
 3.知っている方がいましたら教えていただけませんか。
 4.読みずらい文章ですみません。宜しくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2

なんとなく誤解があるような気がします。
実行ファイルを実行するとプロセスが作成され、さらに最初のスレッドが作成されます。ですから、この場合は、スレッド(A)とスレッド(B)ということになります。

そして、グローバル変数はプロセス固有のものなので、全てのスレッドから参照できます。mallocなどで取得したメモリも、アドレスさえわかっていれば、全てのスレッドから参照できます(Cのランタイムは同時に呼び出されてもいいように、マルチスレッド用のランタイムをリンクしないとダメです)。また、状況によっては、同期処理が必要になります。

スレッド(A)から、スレッド(B)が実行中の関数のローカル変数へ書き込みをするようなケースではないと思いますので省略します。

あえて、特定のグローバル変数を嫌うのであれば、SpiralGalaxyさんの言われているように、スレッド(A)がスレッド(B)を作成するときに、なんらかのワークのアドレスを渡すようにするか、TlsAlloc()などを使用して、全てのスレッドが共通のワークを参照できるようにする方法が適当だと思います。
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 39% (632/1595)

aaa と bbb が同じ構造体だとして (A)の構造体 aaa を (b)の構造体 bbb にコピーするには… ということでいいんですね? CreateThread()の lpParameter に aaa のポインタをセットして呼び出してやって スレッド(B)でコピーしてやればいいです。 メインのスレッド { struct TEST aaa; CreateThr ...続きを読む
aaa と bbb が同じ構造体だとして (A)の構造体 aaa を (b)の構造体 bbb にコピーするには…
ということでいいんですね?

CreateThread()の lpParameter に aaa のポインタをセットして呼び出してやって スレッド(B)でコピーしてやればいいです。

メインのスレッド
{
struct TEST aaa;

CreateThread(…, (LPVOID)&aaa, …);


}

DWORD WINAPI ThreadFunc(LPVOID pAAAA)
{
struct TEST* pTest = (struct TEST*)pAAAA;
struct TEST bbb;

memcpy(&bbb, pTest, sizeof(bbb));

...
}

こんな感じでしょうか。
お礼コメント
yoshio_n

お礼率 24% (17/70)

さっそくの回答ありがとうございます。参考になりました。
投稿日時 - 2001-10-10 22:27:05


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ