3

次のように動作する C++ Linux のみ (posix のみに緩和可能) の IPC ソリューションに興味があります。「電卓」というプログラムが起動し、メッセージを聞くことができます。電卓には、メッセージ文字列を定期的にチェックし、その内容に基づいて動作するループがあります。

「send_msg」と呼ばれる別のプログラムは、その pid (理想的にはホスト名/pid、tcp または udp 経由) にメッセージを送信できます。

$ calculator &

// awhile later

$ send_msg <calculator pid> show calculations
Calc1: 52% complete
Calc2: 21% complete
$ send_msg <calculator pid> alter Calc2 <numeric parameters>
Ok! I'm restarting my calculations!
$

私は C++ に非常に精通していますが、ネットワーク プログラミングについては何も知らず、今はそれを学ぶために多くの時間を費やすことに興味がありません。上記を行う使いやすい C++ パッケージはありますか? ポート番号やファイルの場所などを選択する必要はありません。

4

3 に答える 3

2

zeromq (綴りは 0mq)、または分岐したcrossroadsioが好きかもしれません。これらは多くのハンドホールディングを抽象化して、単純な pub/sub や他の多くのパターンを可能にするからです。0mq には、単純なピンポンから始まるたくさんの例があります (あった?)。

于 2012-10-10T01:51:52.003 に答える
0

あなたが要求しているセットアップは単純ではないと思います。

バックグラウンド計算機とフロント エンド間の通信には、おそらく Unix ドメイン ソケットまたは TCP ソケット (ポート番号) を使用するのが最適です。したがって、たとえば、次のように実行できます。

calculator -p 3456 &

次に、電卓はポート 3456 でリッスンします。send_msgプログラムを使用して、電卓に次のことをさせることができます。

send_msg -p 3456 show calculations

電卓がメッセージを受信すると、命令に従ってsend_msg動作し、ソケット上のプログラムに応答を送り返します。その後、プログラムはそれを標準出力にエコーします。

一方、マルチスレッド化が必要な計算機があります。また、各計算の進行状況を報告できるように、各計算に含まれる作業量を判断できる必要もあります。あなたも私も計算の設定方法を指定していませんが、次のようになる可能性があります。

send_msg -p 3456 new calc.file

ファイルから問題を読み取って、電卓が新しい計算を開始する必要があることを示しますcalc.file。エコーバックする可能性があります:

Calc1: ETC = 3:15

ここで、多かれ少なかれ不正な手段によって、完了までの推定時間 (ETC) が 3 分 15 秒であると判断されました。同様の方法で 2 番目の計算を設定できます。これを処理するには、 からの接続をリッスンするコントローラ スレッドが必要ですsend_msg。新しいジョブを作成するように指示されると、新しいスレッド (またはプロセス) を開始して計算を行います。電卓のマスター スレッドと実際の計算スレッドとの間で何らかの合意されたメカニズムが存在する必要があります。これは、各スレッドが進行状況を書き込み、マスターが読み取る場所と同じくらい単純かもしれません。しかし、計算スレッドは、実行した作業の量、残りの作業量、見積もりを変更する必要があるかどうかを追跡する必要があります。

さて、私は物事を複雑にしすぎているかもしれませんが、あなたが示したインターフェースは、それに似たものが必要かもしれないことを示唆しています. send_msg電卓をシングル スレッド化する場合、設定した各計算に対してラウンド ロビン スケジューリングを行い、プログラムが新しいメッセージを送信した かどうかを定期的に確認する必要があります。

于 2012-10-10T02:38:00.937 に答える