Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: YvenTitan от Сентябрь 09, 2019, 17:29



Название: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: YvenTitan от Сентябрь 09, 2019, 17:29
Здравствуйте
Можете подсказать, правильно закрывать QSerialPort при физическом отключении COM или нет?
В моем случае это так: есть COM, который появляется при подключении USB-устройства; его открываю, работаю, а потом устройство могут неожиданно выдернуть. Если не вызывать close(), то порт считается после этого открытым.
В принципе, можно вызвать close() и все работает, но при взгляде на алгоритм программы возникает вопрос: "Зачем закрывать порт, который отвалился?"


Название: Re: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: qate от Сентябрь 10, 2019, 08:44
Если выдернуть, не закрывать и записать в него данных - будет ли сигнал QSerialPort::errorOccurred и/или значение error() ?


Название: Re: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: YvenTitan от Сентябрь 10, 2019, 09:41
Да, есть только сигнал QSerialPort::ResourceError


Название: Re: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: qate от Сентябрь 10, 2019, 09:52
тогда если закрыть его при получении ResourceError, то выглядит все логично



Название: Re: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: YvenTitan от Сентябрь 10, 2019, 10:13
Почему? Можете вкратце объяснить, что происходит при открытии и закрытии порта в классе QSerialPort или скинуть ссылки почитать про это. Документацию на QSerialPort читал - этого мало для понимания.


Название: Re: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: sergek от Сентябрь 10, 2019, 11:02
Могу ошибаться, но, кажется, автор (kuzulis) говорил, что при получении ошибок в порту его необходимо переинициализировать, т.к. результат дальнейшей работы с портом непределен.


Название: Re: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: qate от Сентябрь 10, 2019, 11:13
Почему?

При открытии файла или порта ему назначается handle или "описание" в понятиях ОС
Ошибки при работе с handle не закрывают его автоматически
Очевидно, что если воткнуть обратно COM, то его нужно проинициализировать на скорость и параметры заново
Сама ОС не сделает этого



Название: Re: Закрытие QSerialPort при удалении физического COM из Windows
Отправлено: YvenTitan от Сентябрь 10, 2019, 13:46
Спасибо