シリアルポートコミュニケーション:ポーリングシリアルポートvsシリアルポートの使用DataReceivedイベント

StackOverflow https://stackoverflow.com/questions/644623

  •  22-07-2019
  •  | 
  •  

質問

私の見直し一部のコードに書いた通信シリアルポートクライアントまで、フルのC#にCF2.0になります。を利用していませんDataReceivedイベントで信頼性に欠ける。 MSDNる:

のDataReceivedイベントではない gauranteedされるバイト を受信します。利用のBytesToRead物件 どのデータは 読み込み、バッファです。

私は投票のポートを書いを委譲するプロセスのデータで読み出します。読んだもののどこかにする"ポーリングが悪い"(解説).

そのアイデアはなぜポーリングが悪い?ほかのスレッド上の注意-私は別のスレッドのバックグラウンドのスレッド)の世論調査のポートには、スレッドが終了した後に読み込むデータは、すべての試験および作業性に優れています。

役に立ちましたか?

解決

これを読むと、1バイトあたり1つのイベントではなく、複数バイトで1つのイベントを取得する可能性があります。データの準備ができたときにイベントを取得し、「スキップ」しないようにする予定です。完全に数バイト。

このイベントは常に使用しており、問題はありませんでした。

他のヒント

従来の知恵である"ポーリングが悪いのではなくて、最終的にa CPU-行きます。場合はブロックI/Oを使用し、CPUはその他のプロセスまでのイベントなどが挙げられる。

とこともできるものをセットで投票を待ち(短い)タイムアウトを返す前にいないときに文字が可能です。場合に適したタイムアウトが選択され、その後簡単なポーリングループの使用を大幅に低CPU時間,およびその他のプロセスを取得します。

でおすすめシリアルポートからC#、がんの危険かを当てるというものがどのよう

のDataReceivedイベントであることが保証されていない上げバイトを受信します。使用 のBytesToRead性の決定にはどのくらいデータが読み込まれる、バッファです。

は大きな期待はできなかった。この状況下でのイベント以上の文字が可能です。単に取得する利用可能な全ての文字のイベントハンドラは、すべてます。

編集: ってブロッキングコースレッドが最良の答えます。なポーリング自体以降のスレッドが文字まで遮断されます。必要がある場合がありますチューニングのバッファサイズのシリアルポート設定が必要な場合にデータを加工で着による固定サイズのチャンク.

ブロッキング読み取り呼び出しを使用している場合でも、基になるシリアルポートドライバーコードは割り込み駆動型であると確信しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top