2017-08-25 15 views
1

共有メモリをブーストするためにリアルタイムデータを書いています。当初、私はこの私がSHMにアクセスするたびに使用していた:デバッグモードでブーストプロセス間共有メモリを開放するopen_or_createは毎回例外をスローする

boost::interprocess::managed_shared_memory segment(boost::interprocess::open_or_create, "MySharedMemory",20000000); 

を、私は、この呼び出しは、常にこの例外をスローすることが判明:

First-chance exception at 0x00007FFA30BB95FC in testerud.exe: Microsoft C++ exception: boost::interprocess::interprocess_exception at memory location 0x000000000550E1C0. 

しかし、私は開くことができたとプッシュ共有メモリへの私のデータ。私はこの問題に回り込むことが分かった。私はプロセスの開始時に別の関数をopen_or createに作成し、毎回書き込むのにopen_onlyを使用しました。例外はありませんでした。

私はこれの背後にある理由が不思議です。ブーストドキュメントから

+0

"デバッグモードでは、この呼び出しは常にこの例外をスローすることがわかりました" - あなたがそれを宣言すると、どのように関連するのですか? – sehe

+0

また、なぜ他にスレッド/プロセスが存在しない場合でも、毎回セグメントを開くのはなぜですか?セグメントを開いたままにしておきます。それ以外の場合、「リアルタイム」は間もなく「犬のゆっくり」と言ってもいいでしょう。 – sehe

+0

はい、ここには関係ありません。私はそれを削除します。ありがとう。 – brownKnight

答えて

1

マネージドメモリ・セグメントはまた、デバッグを行うために構築という名前のユニークなオブジェクトを反復処理する可能性を提供します。 注意:この繰り返しはスレッドセーフではありませんしたがって、他のスレッドがセグメント内で名前付きインデックスまたはユニークインデックス(作成、消去、予約など)を操作していないことを確認する必要があります。索引を伴わない他の操作を同時に実行することができます(たとえば、未処理のメモリー割当て/割当て解除)。

+0

ありがとうございますが、それにアクセスする他のスレッドやプロセスはありません。たとえそうであったとしても、open_onlyとopen_or_createではどう違うのですか? – brownKnight

関連する問題