問題タブ [posix-select]
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.
c - select() を使用してパイプを監視する場合のセグメンテーション違反
親プロセスがパイプを介して2つの子プロセスのそれぞれに文字列の半分(数字)を送信するプロセスツリーを作成することを前提とするプロジェクトに取り組んでいます。数字が出現する回数を計算し、集計を渡します (できれば int の配列の形式で、親に戻します。
私はまだこのことを構築する初期段階にあり、使用に巻き込まれ続けていselect()
ます。現在、プログラムを実行しようとするとSEG_FAULTが発生し、Eclipseにスローすると、ファイル記述子を読み取りに設定しようとした2回目にエラー(EXC_BAD_ACCESS:メモリにアクセスできませんでした)が発生するようですfdセット。
問題がどこにあるのかわかりません。このコードのほとんどは問題とは関係ありませんが、どこかでずさんな間違いを犯した場合に備えて含めました。この問題は bit_count 関数で発生しているようです。ラベルを付けました。
}
c - パイプで select() を使用する
アイデアは、情報をツリーの下に送信し、値をツリーの上に送り返し、上に行くにつれて情報を集約するバイナリ プロセス ツリーを作成することです。
私が抱えている問題はselect()
、パイプをいつ読み取る準備ができているかを判断するために使用することです。私がこれまでに書いたことでは、最初のパイプ (最初の左側の子) は情報を受け取り、それを出力することができます。ただし、2 番目のパイプ (最初の右側の子) は、情報を受け取る前にタイムアウトします。最初のパイプは問題なく動作するため、理由はわかりません。
それぞれの子は、最終的には独自の子を作成します。プロセスのこの部分を開始するには、select()
.
c - ファイル I/O の select() 呼び出しを使用した Pthread プロデューサー/コンシューマー
OpenCV を使用して組み込み Linux コンピューターで実行するために開発しているリアルタイム コンピューター ビジョン プログラムのキャプチャ パフォーマンスを改善しようとしています。複数のスレッドと共有メモリ バッファを使用して、(1) ビデオ フレームのキャプチャと (2) それらの処理 (「生産者/消費者の問題」と思われます) のタスクを分離したいと考えています。pthread、mutex 変数、および条件変数について調べましたが、それらを関数でどのように使用する必要があるかわかりませんselect()
。
現在、ビデオ フレームは、Video4Linux2 Video Capture Exampleを利用したコードを使用してキャプチャされselect()
ます。私が理解しているようにselect()
、ウェブカメラからデータが利用可能になるまでプログラムをブロックします。これは遅くなり、時間の大幅な無駄になる可能性があります。できれば、その無駄な CPU サイクルを画像処理に使用したいと考えています。(もちろん、これは常に 1 フレーム分「古くなった」画像に対して処理を行う必要があることを意味しますが、30 fps では実質的にリアルタイムになります)。
とを使用して共有データを保護するサンプル コードをいくつか見つけましたが、 . より具体的には、私の懸念を説明するための疑似コードを次に示します。(注:これらのスレッドが実際に正しく機能するには、上記のリンクされた例のようなループやその他のチェックを含める必要があることを認識しています。)pthread_mutex_lock()
pthread_mutex_control()
select()
c - C でデータを送受信するために FD_SET で読み取りと書き込みのセットを作成する
クライアントとサーバーがあり、クライアントはselect
ループを実行して TCP 接続と UDP 接続を多重化します。read
TCP 接続ファイル記述子をと セットの両方に追加してから、write
セットを使用して 1 つのメッセージ交換を開始し、セットを使用して 1 つのメッセージ交換を開始write
しようとしていますread
。セットとのメッセージ通信はwrite
正常に機能しますが、read
セットではできません。
クライアントコード:
c++ - ループ内の accept() を使用した pselect()
これらのループで新しいスレッドを生成するマルチスレッド サーバーがあります。
ほとんどの場合、これは意図したとおりに機能しますが、ときどき pselect() が起動しません。tcpdumpで確認したところ、データがサーバーに送信されていることがわかったので、メインループと関係があると思います。
また、gdb で実行し、データを送信する前に pselect() で壊れた場合、pselect() は意図したとおりに 1 を返します。
このように pselect() を使用すると何か問題がありますか?どうすれば修正できますか?