2

現在、シリアルポートを介して RFID カードリーダーからデータを受信するアプリに取り組んでいます。データ、その後、データは TCP/IP によってサーバーに送信される必要があります。

私はすでに両方を機能させていますが、同時には機能していません。カードから ID を読み取ることができ、サーバーにテキストを送信することもできます。しかし、私はあなたに提案を求めたいと思います.これら2つのことが一緒に働くための最良の解決策は何ですか.

現時点では、2 つのクラスで TCP/IP の使用とシリアルの使用があります。メインクラスから両方のクラスのオブジェクトを作成し、シリアルポートからデータを読み取るスレッドを開始します。

このようなことを試してみるべきですか?

クラスでは、シリアル使用オブジェクトのみを作成し、読み取りを処理するスレッドを呼び出します。その読み取りスレッド内で、TCP/IP 接続を開き、シリアル ポートから受信したデータを送信する新しいスレッドを呼び出します。

もう 1 つの方法は、メイン クラスから両方の接続を開きますが、シリアル ポートの受信スレッドから (すでに開いている接続を介して) TCP/IP 送信スレッドを開始します。

私はスレッド化の経験があまりないので、仲間のソフトウェア開発者に助けを求めます。ありがとう!(それが役立つ場合は、ここにコードの一部を貼り付けることができます)。

更新しました:

それはヒントです。あなたが提案したことを詳しく調べます。それは良い考えだと思いますが、私が言ったように、私はスレッド化の経験があまりありません。これらのクラスで個別のスレッドを作成し、両方が同じオブジェクトを使用する場合、それは機能しますか?たとえば、メッセージ クラスのオブジェクトを使用し、COM 処理スレッドで新しいオブジェクトを作成し、TCP/IP 処理スレッドがそのオブジェクトを使用します。 TCP/IP 経由でデータを送信するには? List でできるように、クラス Message のオブジェクトのキューを作成できますか? また、クラス内のあるスレッドで作成されたオブジェクトのキューを別のスレッドに渡すにはどうすればよいですか

4

1 に答える 1

3

2 つの異なる通信方法を別々のクラスに抽象化することは優れた設計であるため、私はそれに固執します。

メイン クラスでスレッドを処理するのではなく、各通信クラスに独自のスレッド管理を処理させ、共有スレッドセーフ キューを介してそれらの間で通信します。

シリアル通信オブジェクトは、シリアル ポートとの通信、データの読み取り、およびそのデータのキューへの書き込みを処理できます。TCP通信オブジェクトは、接続、再接続、切断などを処理し、キューからデータを消費してソケットに送信し、ネットワーク上に送信できます。

メイン クラスは、キューと、同じキュー インスタンスで渡される 2 つの通信オブジェクトを作成するだけです。

于 2013-10-02T14:25:37.730 に答える