私は、USBデバイス(USBCap)からフレームをキャプチャしてネットワーク経由で2番目のプログラムImage Server(IMGSvr)に送信します。C(win32)でフレームを送信するためのソケットとスレッドのアプローチ
どちらのプログラムも、同じマシンまたは同じローカルネットワーク上で実行されます。
USBCapは、複数のUSBデバイス(「チャネル」という名前)をキャプチャします。これを行うために、私はDirectShowラッパー(videoInput)から新しいフレームを取得している各チャンネルにスレッドプロシージャを使用しています。
問題はソケットから始まります:IMGSvrにフレームを送信するのに、ただ1つのTCP SOCK_STREAM接続を使用しています。 send()はsend()の後続の呼び出しをブロックしています(他のスレッドによって)utilフレームが送信されます。
すべてのスレッドをブロックすると、なぜ私はマルチスレッドプログラムを使用していますか?
これを解決するにはどうすればよいですか?スレッドにプログラムを適応させると、新しいフレームがフレームのキューに入れられ、別のスレッドがこのキューを空にし、キューに入れられたフレームをIMGSvrに送信することがあります。
あなたはどう思いますか?
新しい要素を書き込むときに、このキューにLOCKを実装する必要がありますか?書き込み
おかげで、 ダニエル・コッホ
なぜUDPプロトコルを使用しないでください。パケット損失はごくわずかです。 – lsalamon
フレームオーダーを失う可能性があるので。そして、私はそれぞれの予想されるチャンネルにリスナーを作るべきです(今日IMGSvrはチャンネルについて知らず、その数はヘッダーに入っています)。 –