2016-07-17 29 views
0

私は4つの 'double'変数と 'int'変数を共有メモリに格納しようとしています。QSharedMemoryにデータを保存する

QSharedMemory::data()は、create(int size)とは別に設定されたメモリへのポインタを提供します。私の質問は:どのように私は適切に参加し、そのデータを共有メモリに深くコピーすることができますので、私はそれを読む/書き込みのための別のプログラム上の要素にアクセスできますか?

唯一の私が見たものは、値をQStringに入れることでした。それは正しい方法ですか?

ありがとうございました。これらの線に沿って

答えて

3

何か:

struct SharedData { 
    double fourDoubles[4]; 
    int andAnInt; 
}; 

QSharedMemory shared_mem; 
shared_mem.create(sizeof(SharedData)); 
SharedData* p = static_cast<SharedData*>(shared_mem.data()); 
p->fourDoubles[0] = 1.0; 
p->andAnInt = 42; 
+0

があるため、パディングの構造体のためにそのリターン '40'ではないでしょうか? 4倍の倍数+ 1つの整数は、64ビットマシンでは「36」のサイズを与えます。 –

+0

あなたは先生、天才です!私は別のインスタンスからデータを読み込むために同じ静的キャストを使用しました。だからシンプル:D –

+0

@ RawNそして...?私はあなたが何を運転しているのかよくわからない。 'sizeof(SharedData) 'の正確な値は、36または40かそれ以外のものであればどうでしょうか? –