Russian Qt Forum
Ноябрь 25, 2024, 15:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Закрытие QSerialPort при удалении физического COM из Windows  (Прочитано 5868 раз)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« : Сентябрь 09, 2019, 17:29 »

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

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Сентябрь 10, 2019, 08:44 »

Если выдернуть, не закрывать и записать в него данных - будет ли сигнал QSerialPort::errorOccurred и/или значение error() ?
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #2 : Сентябрь 10, 2019, 09:41 »

Да, есть только сигнал QSerialPort::ResourceError
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Сентябрь 10, 2019, 09:52 »

тогда если закрыть его при получении ResourceError, то выглядит все логично

Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #4 : Сентябрь 10, 2019, 10:13 »

Почему? Можете вкратце объяснить, что происходит при открытии и закрытии порта в классе QSerialPort или скинуть ссылки почитать про это. Документацию на QSerialPort читал - этого мало для понимания.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Сентябрь 10, 2019, 11:02 »

Могу ошибаться, но, кажется, автор (kuzulis) говорил, что при получении ошибок в порту его необходимо переинициализировать, т.к. результат дальнейшей работы с портом непределен.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #6 : Сентябрь 10, 2019, 11:13 »

Почему?

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

Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #7 : Сентябрь 10, 2019, 13:46 »

Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 23.