私はこのフォーラムに初めて参加し、しばらく気になっていた質問があります。私のセットアップは、USB/Uart コンバーターを使用して PC に接続されたシリアル対応のキャラクター ディスプレイです。C++ スタイルの別の書き込みバッファー スレッドで、serialPort クラスを介してディスプレイにバイトを送信しています。
private void transmitThread(){
while(threadAlive){
if(q.Count > 0){ // Queue not empty
byte[] b = q.Dequeue();
s.Write(b,0,b.Length);
System.Threading.Thread.Sleep(100);
}
else{ // Queue empty
System.Threading.Thread.Sleep(10);
}
}
}
シリアル ポートが既に開いていると仮定すると、これは完全に機能し、すべてのデータがディスプレイに送信されます。ただし、このスニペットには例外処理はまったくありません。したがって、私は典型的な C# 機能である「using」ステートメントを実装し、次のように必要なときにのみポートを開くことを検討していました。
private void transmitThread(){
while(threadAlive){
if(q.Count > 0){ // Queue not empty
byte[] b = q.Dequeue();
using(s){ //using the serialPort
s.Open();
s.Write(b,0,b.Length);
s.Close();
}
System.Threading.Thread.Sleep(100);
}
else{ // Queue empty
System.Threading.Thread.Sleep(10);
}
}
}
この関数の問題は、ランダムな量のデータしか送信しないことです。通常、80 バイトのバイト配列の約 3 分の 1 です。スレッドのさまざまな優先度設定を試しましたが、何も変わりません。
重要な何かを見逃しているのでしょうか、それとも送信要求後にポートを閉じるのが速すぎますか?
あなたが私を助けてくれることを願っています。ありがとう :)