2

ようやくboost:interprocess ライブラリの基本を理解できたと思います。すべて標準データ型であるいくつかのメンバー変数を含む比較的単純なクラスを扱うときに、これをうまく使用しています。

ただし、かなり複雑なクラスをプロセス間共有メモリにプッシュするという問題に直面しており、まったく運がありません。ここの誰かが助けてくれることを願っています(または、別の解決策に向けて私を導くことができます)。私が基本であることを望むものにそれを取り除いて、私はこれらの線に沿って何かを持っています:

// these first two classes are from the Gnu Scientific Library, so I can't  
// (or won't) be able to mess with the definition of these structures.  
typedef struct   
{  
    size_t size1;  
    size_t size2;  
    size_t tda;  
    double * data;  
    gsl_block * block;  
    int owner;  
} gsl_matrix;  

typedef struct   
{
    size_t size1;
    size_t size2;
    size_t tda;
    int * data;
    gsl_block_int * block;
    int owner;
} gsl_matrix_int;

class MyNumbersClass
{
    gsl_matrix_int* m_pIntMatrix;
    gsl_matrix*     m_pDblMatrix;
    unsigned int iVal1;
    unsigned int iVal2;
}

class MyOtherDataClass
{
    std::vector<int> m_vInputs;
    std::vector<double> m_vOutputs;
    std::string m_sTitle;
    bool m_bCorrect;
}

class SharedClass
{
    MyNumbersClass* m_pFirstNumbers;
    std::vector<double> m_vDblData;
    std::vector<MyOtherDataClass> m_vOtherData;
}

複数のプロセスがデータにアクセスできるように、プロセス間メモリ空間に SharedClass オブジェクトのベクトルを作成する必要があります。どう頑張っても解決策が見つからないようです。プロセス間バージョン (interprocess::vector、interprocess::string、offset_ptr など) の途中ですべてのメンバー変数を作成するよりも簡単な方法があるようですが、そうでない場合もあります。それでも、GSL ライブラリ構造は言うまでもなく、すべてのアロケータなどを処理する方法がわかりません。

ヘルプ!

4

1 に答える 1

0

あなたの問題はSTLコンテナにあります。ご想像のとおり、boost::interprocess コンテナーを使用する必要があります。

たとえば、文字列の使用については、こちらの回答を参照してください。ベクトルについては、こちらを参照してください。

乾杯

于 2010-12-27T18:33:39.110 に答える