2009-03-21 9 views
2

通常、このように、グローバルに使用されて変数に.cppファイルの結果に変数を使用して:.cppファイルは静的ライブラリと複数の共有ライブラリ(DLL)に置かれたときC++でprocess-global変数を実装する方法は?

.h file: 
extern int myGlobal; 
void work(); 

.cpp file: 
int myGlobal = 42; 
void work(){ myGlobal++; } 

か実行可能なリンクを静的ライブラリと比較すると、それぞれにmyGlobalという独自のコピーがあります。 work()は変数の独自のバージョンを変更します。

私の質問は、プロセス固有の変数またはその変数へのポインタを取得する方法はありますか?スレッド全体の変数に対して、スレッドローカルストレージと同様のものがあります。プラットフォームに依存しない必要はありません。 Win32で動作する場合のボーナスポイント:

答えて

4

単純:プロセスリンク内のすべてのDLLを変数を公開する単一のDLLにします。

3

静的リンク(DLL内でmyGlobalをスティックする)、静的ライブラリとのリンクを1回だけ実行してください(潜在的には首の痛みが増えます)。

0

Boost.Interprocess、特にthis pageを複数のプロセス間で共有することをお勧めします。ここでは、このライブラリを使用して共有メモリ空間を作成し、すでに作成されているものを開き(実際には「開いたり作成する」)、必要に応じてサイズを変更してアクセスする方法を見つけることができます。あなたはかなり速く進むはずの簡単な例があります。

+0

「プロセス全体」という質問は、複数のプロセスではありません。同じプロセス内の共有メモリは恐らく少し残酷です。 –

+0

あなたはそうです。しかし、それは動作し、それを使用することは難しいことではありません。それではなぜですか? :) –

+0

注意:boost :: interprocessには落とし穴や問題がたくさんあります。たとえば、いくつかのプラットフォームでは、待ち状態のようなものでビジー状態になる傾向があります。あなたが使用しているブーストコードを必ず読んでください。 –

0

おそらく、これは1つのプロセスでは過剰ですが、私はshared sectionsを使用して、あなたの説明と似たようなことを達成しました。

+0

私はプロセス全体の変数だけを必要とするので、共有セクションは多すぎるでしょう。しかし、提案してくれてありがとう! – vividos

関連する問題