Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-05-15 15:26:20 ЛС | профиль | цитата
Netspirit писал(а):
после строки _hi_onEvent(_event_onRead, ReadStr) идёт безусловный вызов событиея _event_onSyncRead. То-есть, нарушение логики - пользователь отключился от порта, а событие после этого произошло

Не вижу нарушения логики, ибо никто не обещал, что onSyncRead можно предотвратить какими-то действиями по onRead.
Это, вообще-то - одно и тоже по логическому смыслу. Мы так раньше думали.
Скажу больше, мы обещали, что эти два события произойдут после приема. Прием произошел УЖЕ. После первого события, предположим, Вам расхотелось принимать далее.
Вы и не будете. Дальше. Но то, что УЖЕ пришло - соблаговолите забрать.
Вам никто руки не выламывал, сами подключились к обоим событиям.
И где здесь, спрашивается, нарушение логики...

А вот усмотреть логику закрывания порта по приему чего-то там по onRead - не получается у меня.
Сплошной бред в голове: мы усмотрел матерное выражение а приходящем потоке, и обиделись настолько, что надо именно закрыть порт, и именно в этом же потоке.
Все, только сейчас, только немедленно, пока не началось...
Фантазии - вещь полезная, но не до такой же степени.

Netspirit писал(а):
(так как есть большая вероятность, что пока поток стоял на таймауте, пользователь сделал doClose). Чем здесь помогут Event - не представляю.
Ну вы, блин, даете...

WaitForMultipleObjects - срывается с ожидания ЛИБО по OvrRd.hEvent, ЛИБО по EvRdStop (при bWaitAll=false, третий параметр).
Сразу же, безо всяких таймаутов.
Он так устроен, этот WaitForMultipleObjects.
Грубо говоря, он для этого и сделан был.
карма: 9

0
Редактировалось 2 раз(а), последний 2017-05-15 18:18:52