Коммуникация последовательного порта: опрос последовательного порта по сравнению с использованием события DataReceived последовательного порта

Я только что получил ответ от службы поддержки второго уровня в filestack ... мы можем получить прямой доступ к URL:

http://cdn.filestackcontent.com/%3Capikey%3E/store = рабочие процессы:% 5B% 3Cworkflow_id% 3E% 5D /% 3CURL-OF_THE_FILE_THAT_YOU_WANT-TO_VALIDATE_VIA_WORKFLOW% 3E

15
задан Jon B 13 March 2009 в 21:04
поделиться

3 ответа

Путем я считал, что, Вы могли бы получить одно событие для нескольких байтов, а не одно событие на байт. Я все еще ожидал бы получать событие, когда данные готовы, и не имеют его, "пропускают" некоторые байты полностью.

Я всегда использовал это событие и не испытал затруднений из-за него.

18
ответ дан 1 December 2019 в 02:38
поделиться

Расхожее мнение имеет его, что "опрос плох", потому что это часто заканчивает тем, что было зависящим от ЦП процессом. Если блокирование ввода-вывода используется вместо этого, затем ЦП доступен для других процессов, пока случай не происходит.

Тем не менее обычно возможно настроить вещи так, чтобы опрос ожидал (короткого) тайм-аута прежде, чем возвратиться, когда никакие символы не доступны. Если подходящий тайм-аут выбран, то Ваш простой цикл опроса использует значительно меньше процессорного времени, и другие процессы также добираются для выполнения.

Я не использовал последовательные порты от C# вообще, но я собираюсь рисковать предположением это, под чем подразумевала документация

Событие DataReceived, как гарантируют, не будет сгенерировано для каждого полученного байта. Используйте свойство BytesToRead для определения, сколько данных оставляют быть считанными в буфере.

это, Вы не можете ожидать получать одно событие на символ. Это могло бы при некоторых обстоятельствах поставлять событие больше чем с одним доступным символом. Просто получите все доступные символы в своем обработчике событий, и все будут хорошо.

Править: Выполнение блокирующегося запроса к потоку читателя могло бы быть лучшим ответом в целом. Это не опрашивает по сути, так как поток заблокирован, пока символы не прибывают. Вы, возможно, должны были бы настроить буферные размеры и некоторые настройки последовательного порта, если необходимо обработать данные, когда они прибывают, а не в фиксированные размерные блоки.

8
ответ дан 1 December 2019 в 02:38
поделиться

Я почти уверен, что основной код драйвера последовательного порта управляется прерываниями, даже при использовании блокирующего вызова Read.

1
ответ дан 1 December 2019 в 02:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: