問題タブ [boost-interprocess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2090 参照

c++ - 2 つのプログラム間でのメッセージの受け渡し

現在、マスターとスレーブの 2 つのスタンドアロン C++ プログラムがあります。マスターは、 を使用して共有メモリにデータを書き込みboost::interprocess、メモリから読み取ることができるスレーブを起動します。

私がやりたいことは、スレーブを常に実行し、メモリが書き込まれ、読み取る準備ができたときにマスターがスレーブにメッセージを送信することです。

同じことを達成するために私が考えることができる唯一の方法は、スレーブが共有メモリでオブジェクトの存在を常にチェックし、それが検出されたときにそれを読み取って削除することです。ただし、これは最適ではないようです。

同じことを達成するより良い方法はありますか?


背景:これは私の以前の質問の続きです...

0 投票する
0 に答える
374 参照

c++ - ブーストインタープロセス: マップの作成方法カスタムアロケーターとは?

だから私はインタープロセスチュートリアルmap<KeyType, MappedType, std::less<KeyType>, ShmemAllocator> MyMap;からfaaced std::string、std::stringマップを作成する方法を知りたいですか?

0 投票する
2 に答える
290 参照

c++ - ファイルベースのルックアップテーブル

ルックアップテーブルとして使用するには、10^104バイトの整数の配列が必要です。RAMにロードするには40GBかかりますが、これは現実的ではありません。初期化された後は、この配列に書き込む必要はありません。単一のプロセスの複数のスレッドから同時に、この配列のランダムな場所から個々の整数値を読み取る必要があります。64ビットプラットフォームを使用することが保証されています。このルックアップテーブルの最速の実装は何ですか?通常のファイル読み取り機能を使用しますか、それともメモリマップトファイルをブーストしますか?

0 投票する
0 に答える
525 参照

c++ - ブースト 1.49 インタープロセスのサンプル コードがコンパイルされない

私はこのようなコードをコンパイルしようとします (linux ubuntu、boost 1.49):

私にとってはもうコンパイルされません。エラーリストはこちらです(重要ではないポーランド語で申し訳ありません):

ブースト 1.49 はバグのあるバージョンですか?

0 投票する
1 に答える
370 参照

c++ - boost::interprocess によってロックされた既存の fstream の切り捨て

プロセスを閉じずにフラグを使用してデータを含むを再度開くと、プロセスが を保持しているときにどうなりますか?fstreamstd::ios::truncboost::interprocess::file_lock()

OS がファイル ロックを維持することを期待する必要がありますか? または、ファイルが閉じられると、OS はロックを透過的に登録解除しますか? Windows と POSIX の両方の経験があれば歓迎します。

編集

私の主な目標は、構成ファイルを切り捨てて書き直すことです。このファイルの第 2 の目的は、他の同等のデーモンが起動しないようにすることです。したがって、boost または c++ stl を使用して、ファイルを閉じずにファイルを切り捨てる別の方法がある場合、私はすべて耳にします :D

0 投票する
1 に答える
800 参照

c++ - ブースト共有メモリ タイプ

私は次のことをしようとします:

boost::interprocess ライブラリを使用して共有メモリに「大きな」配列 (1 000 000 + オブジェクト) を作成します。

私のコードには以下が含まれています:

私の質問は、このブースト関数の戻り値の型をどのように把握するのですか?

上記と同じことを次のように行うと、 "::pair の代わりに SingleField が機能しないようですが、2 番目のコンテナーは必要ありません。必要なのは 1 つだけですが、1 つでは機能しません!

eclipse の出力は、どういうわけか私には難解です。ブーストを使用して以来、このような問題のために何度か停止されましたが、関数が返す「タイプ」を簡単に把握する方法はありますか? (私は Java から来たので、 Object x という「単純な」定義を使用することに慣れています) 特定の関数が返す型を特定できれば、私が自分で作成したすべての関数を使用して、実際に満足できます。シンプルですが、このライブラリには問題があるようです。

2 番目の質問: なぜこれらの例は常に "type" のペアになっているのですか? ライブラリの前提条件ですか?

-> #include を使用してみましたが、Eclipse はその std::pair を教えてくれます。問題は、なぜ T* なのかということです。これは開始セグメントアドレスですか?

お時間とご回答ありがとうございます。

エクリプス出力:

ブースト ライブラリのマニュアルを何度か読みましたが、間違ったサイトやページを見ている可能性があります。見逃している情報を提供していただければ幸いです。

http://www.boost.org/doc/libs/1_42_0/doc/html/interprocess/quick_guide.html#interprocess.quick_guide.qg_interprocess_container

0 投票する
1 に答える
4049 参照

c++ - Boost :: asio、共有メモリ、プロセス間通信

boost::asioほとんどのオブジェクトはネットワーク通信ベースであるため、入力データのソースとしてのみ使用するように作成されたアプリケーションがあります。いくつかの特定の要件により、入力メソッドとして共有メモリを使用する機能も必要になりました。私はすでに共有メモリコンポーネントを作成しましたが、それは比較的うまく機能しています。

問題は、共有メモリプロセスから消費アプリケーションへのデータの読み取りが可能であるという通知をどのように処理するかです。既存の入力スレッドでデータを処理する必要があり(を使用boost::asio)、その入力スレッドをブロックしない必要もあります。データを待っています。

これを実装するために、共有メモリプロバイダープロセスからのイベントの通知を待機し、データの読み取りを処理するために入力スレッドに完了ハンドラーを送信する中間スレッドを導入しました。

これは現在も機能していますが、中間スレッドの導入は、かなりの量の場合、レイテンシに悪影響を与えるデータを読み取る前に追加のコンテキストスイッチがあることを意味し、追加のスレッドのオーバーヘッドも比較的高価です。

これは、アプリケーションが実行していることの単純な例です。

input_threadデータを直接処理する方法はありますか(?postを介してデータを処理する必要はありませinterrupt_threadん)。割り込みスレッドは、外部アプリケーションからのタイミングによって完全に駆動されると想定されています(データはセマフォを介して利用可能であるという通知)。消費アプリケーションと提供アプリケーションの両方を完全に制御し、オブジェクトで処理する必要のある追加のオブジェクトがあると想定しinput_threadます(したがって、そこでセマフォオブジェクトを単純にブロックして待機することはできません)。目標は、オーバーヘッドを削減することです。共有メモリ提供アプリケーションを介して着信するデータのCPU使用率と遅延。

0 投票する
1 に答える
390 参照

c++ - プロセス間のブースト: 新しいプロセスを開始するには?

Boost.Interprocess を使ってクロスプラットフォームで新しいプロセスを開始することは可能でしょうか? また、次のようなプロセスを開始することは可能echoでしょうか?

0 投票する
0 に答える
318 参照

c++ - ブースト インタープロセス (v 1.41、1.44) x86_64 を使用して文字列データを共有する際に、Null で終了しない文字列

ブースト プロセス間ドキュメントを精査するのに時間を費やしましたが、この奇妙なバグに悩まされています。このコードがブースト バージョン 1.42、x86 で動作することを確認しましたが、タイトルに記載されているバージョンでは動作しません。

これは、文字列を共有する単純なクライアント サーバー モデルです。サーバーがセットアップされ、待機します。クライアントが新しい文字列をサーバーと共有すると、新しく共有された文字列が出力されます。コードは次のとおりです。

サーバ:

クライアント:

これはサーバー出力です:

これはクライアント出力です:

ご覧のとおり、サーバーは文字列データを取得しますが、文字列の終端が正しくないため、出力に余分な/重複する文字が出力されます (4 行目と 5 行目)。クライアント側のデータは破損していません。他に何か重要なことが行われていないのではないかと思います。これに関する指針をいただければ幸いです。サーバー側で破損することなく、Boost 1.42 x86 バージョンでどのように動作するかも奇妙です。どうもありがとう!

PS: マネージド共有メモリ機能を使用しているため、同期 (mutex) メカニズムを明示的に使用していません。やらなくてはいけませんか?