シリアルポートから非常に高速で継続的にデータを取得しようとしています。ボーレートは230400
です。データ、タイムスタンプ、およびファイルを印刷すると、1桁に落ちて、その200ミリ秒で何も読み取らないBytesToRead
場合は常に、200ミリ秒の遅延が発生することに気付きました。遅延後、約3000に戻り、このプロセスが何度も繰り返されます。基本的に、私は継続的にデータを取得していません。BytesToRead
readLine()
BytesToRead
バッファに蓄積される速度データよりも速く読み取っていると思ったので、readBufferのサイズを変更して、このスレッドを1ミリ秒間スリープさせ、バッファが読み取っている速度を維持できるようにしました。それらのどれも機能しませんでした。まだいくつかの遅れがあります。
どんな考えでも大歓迎です。
private void dostuff()//The thread I created after the port is opened
{
var startTime = DateTime.Now;
var stopwatch = Stopwatch.StartNew();
while (serialPortEncoder.IsOpen)
{
if (serialPortEncoder.BytesToRead > 210)
{
try
{
var line = serialPortEncoder.ReadLine();
var timestamp = (startTime + stopwatch.Elapsed);
var lineString = string.Format("{0} ----{1}",
line,
timestamp.ToString("HH:mm:ss:fff") + " "+serialPortEncoder.BytesToRead+"\r\n");
richTextBoxEncoderData.BeginInvoke(new MethodInvoker(delegate()
{
richTextBoxEncoderData.Text = line;//update UI
}));
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}}