2

私はシリアルポートを介して通信しなければならないプロジェクトに取り組んでいます。UARTからRS232経由でかなり「大量の」データ(約6KB / 10ms)を受信するので、それを収集してデコードする必要があります。デコードされたデータはファイルに保存され、それらの一部はGUIに表示されます。

管理されたデータ作業と大量のライブラリのために、C ++ / CLIVisual Studio2010では.NETv4.0を使用)を使用します。

そして私の主な質問は:あなたは私に何を勧めますか:

A)スレッドを使用せず、タイマーを介して5ミリ秒ごとにデータを検索するには...

B)スレッドを使用せず、受信データのイベントに基づいてデータを検索する...

C)スレッドを使用する...

何をお勧めしますか?何が最善の解決策になるかを伝える経験はあまりありません。

今後ともよろしくお願いいたします...

4

1 に答える 1

3

GUIが必要な場合は、データを取得するために別のスレッドが必要になります。xミリ秒ごとにデータを確実に取得してUIスレッドで処理する方法はありません。

それとは別に、スレッドの機能について混乱しているようです。AとBはCと組み合わせることができます。ポートをポーリングしてデータを取得する別のスレッドを使用するか、イベントを使用して新しいデータがいつ到着するかを確認することをお勧めします。タイマーは不正確である可能性があり、結局のところ、データがどのレートで受信されるかを決定するのはポートであるため、個別のタイムベースを使用するのではなく、それをリッスンすることをお勧めします。処理されたデータをキュー(別名プロデューサー)に保存し、さらに別のスレッド(別名コンシューマー)がキューから大きなチャンクを取得してファイルにフラッシュします(5ミリ秒ごとにファイルを書き込むのではなく、大量のデータを書き込みます) 100mSec程度ごとに一度に)。その後、UIスレッドはそのキューからプレビューして、データの一部を表示することもできます。

于 2012-07-24T08:07:30.980 に答える