データの共有 – プログラミング – Home

通知
すべてクリア

[解決済] データの共有


ビオ
 ビオ
(@ビオ)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

開発環境:VC++6.0

通信ゲームを作るために
メインで回しているループに平行して
CreateThreadでサブスレッドを作成しています。

メインとサブ間でデータ(座標データ等)を共有する場合は
メモリの共有化しか方法はないのでしょうか?

申し訳ございませんが、ご教授お願い致します。


引用未解決
トピックタグ
とおり
 とおり
(@とおり)
ゲスト
結合: 21年前
投稿: 43
 

メモリの共有ってのは抽象的な表現で意図がよくわからないが…
相手スレッドの提供するsetterメソッドを叩いて、相手スレッド固有領域にセットして
見てもらうという手もある。(これもメモリの共有というのかもしれんが…)
ただし、中途半端にセットされた値を見ないように、同期させないといけないが。


返信引用
ビオ
 ビオ
(@ビオ)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

>メモリの共有ってのは抽象的な表現で意図がよくわからないが…

すみません・・
一般的なやり方を教えて頂けますでしょうか?


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

文脈から推測するに、
ここでいうメインとサブって、同一プロセス内で動くスレッドのように思われます。
であれば、わざわざ共有メモリを使用せずとも、データの共有はできると思うのですが…?


返信引用
鷲尾不徳
 鷲尾不徳
(@鷲尾不徳)
ゲスト
結合: 21年前
投稿: 21
 

>>メモリの共有ってのは抽象的な表現で意図がよくわからないが…
>一般的なやり方を教えて頂けますでしょうか?

前にこんな感じで使いました。とりあえず投下。
# これって一般的なのかな…
Win9x系でしか試したことないので動くかわかりませんが…

↓アプリを1つ以上同時に起動した場合にカウントアップするだけのサンプル

test.def ********************************************

SECTIONS
seg_test READ WRITE SHARED

test.c **********************************************

#include <windows.h>

#pragma data_seg( seg_test )
int test = 0;
#pragma data_seg()

int WINAPI WinMain( HINSTANCE,HINSTANCE,LPSTR,int )
{
char Mess[32];
wsprintf( Mess,%d\n,++test );
MessageBox( NULL,Mess,test,MB_OK );
return 1;
}

…こっちのほうが一般的かな?
http://www.athomejp.com/goldfish/api/sharedmemory.asp

>メインとサブ間でデータ(座標データ等)を共有する場合は
>メモリの共有化しか方法はないのでしょうか?

書き込み内容から見ると、個人的には sugarさんの意見に賛成。
というか、共有メモリはここでは関係ないと思う。
# 同一プロセス内での共有メモリって何だろう?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

スレッドの良い所にグローバル領域を使って簡単にデータを共有できるという
点があります。これがマルチプロセスだとそうはいかないのでかなり大きなメリットだと
私は考えています。
但し、グローバル境域に置くにしても排他に関しては考える必要があるので
私の場合は、共有データクラスを作成してそれに排他付きのアクセサを作成して
使用するようにしています。
共有データクラスはグローバルにインスタンスを作成します。
安全を考えるなら共有データクラスのメンバーは全てprivateにしておいて
アクセサからしかアクセスできないようにしておく方が良いでしょうね。


返信引用
ビオ
 ビオ
(@ビオ)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

遅くなりましたが
皆様のおかげで解決する事ができました。
ありがとうございました^^


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました