0

リモート マシン上の Python クライアントからのデータをリッスンする Labwindows サーバーがあります。Labwindows サーバーでは、TCP_DATAREADY イベントが発生するたびに、バッファーを読み取ってクライアントからデータを取得します。この時点で、データを解析して UI コントロールを更新する必要があります。ただし、データは頻繁に到着するため、データの解析と UI コントロールの更新のタスクを別のスレッドに割り当てて、サーバーがクライアントからのデータを失わないようにすることが最善です。

Labwindows でスレッド セーフ キューを使用することを考えました。ただし、クライアントから取得するデータは文字列です。文字列要素を持つキューを作成するにはどうすればよいですか? クライアントから受信したデータは、データが到着するたびに更新されるため、ポインターを使用できません。

ソケットからデータを読み取るコードは次のとおりです。

case TCP_DATAREADY:
            if ((dataSize = ServerTCPRead (g_hconversation, receiveBuf,
                                           dataSize, 1000))
                < 0)
                {
                SetCtrlVal(g_hconversation, MAINPNL_TEXTBOX,"Receive Error");
        }
            else
                {
        //receiveBuff should be passed to function that decides where to display it
        display_value_from_client(receiveBuf);

                }

そのため、 receiveBuf は常に変化しており、それへのポインタをキューに保存しても役に立ちません。ここでスレッドを実装して、スレッドが解析機能を処理し、メイン スレッドのソケットからデータを読み取ることだけを気にする必要があるようにするにはどうすればよいでしょうか?

4

1 に答える 1

1

このようなスレッド間通信を実行する「古典的な」方法は、receiveBuf を malloc し、データの受信後にバッファー ポインターをキューに入れ、次のデータのロードのためにすぐに別の受信バッファーを malloc することです。GUI で処理した後、バッファー ポインターを解放できます。

このようなアプローチは、UI スレッドとネットワーク スレッドが同じバッファーで動作することはなく、独立して動作できることを意味します。

于 2013-08-16T16:12:42.063 に答える