Я пытаюсь добиться максимальной пропускной способности через последовательный порт.Я считаю, что мой код C # вызывает состояние переполнения буфера.SerialPort.Write () обычно является методом блокировки.
Проблема заключается в том, что устройство / драйвер, выполняющее преобразование Ethernet в последовательный интерфейс, не блокируется в течение времени, необходимого для передачи сообщения.Кажется, он вообще не блокируется.До тех пор, пока он не прекратит блокировку навсегда, как только слишком много данных будет записано в него слишком быстро.Затем SerialPort необходимо утилизировать, прежде чем он снова заработает.Другая проблема - BytesToWrite всегда == 0 сразу после thw write.Драйвер ???
Итак, как мне обойти эту проблему?
Я пытался выполнить Sleep сразу после записи на время, необходимое для отправки сообщения, но это не работает.
com.Write(buffer, 0, length);
double sleepTime = ((length + 1) * .000572916667) * 1000; //11 bits, 19.2K baud
Thread.Sleep((int) sleepTime);
Я понимаю, что может быть некоторая задержка между тем, когда устройство получает сообщение и когда оно отправляет его через COM-порт.Возможно, это причина, по которой драйвер не блокирует вызов .Write?
Я мог бы подождать, пока сообщение не будет подтверждено узлом.Проблема в том, что я имею дело с тысячами узлов, и некоторые сообщения транслируются по всему миру.Не возможно ждать, чтобы все подтвердили.Что делать?
Есть идеи?