Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSerialPort зависает при попытки закрытии порта
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
IndyStar
Доброго времени суток!
ПО: Qt 5.3.2, Mingw 4.8.2, windows 7 32бит. Подключаемое устройство USB FTDI.

Бага засветилась в QTBUG-41052, но решения там нет.

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

Закрытие порта:

if ( m_serial_port->isOpen() )
{
     m_serial_port->close();
}


Дальше обернул

QSharedPointer< QSerialPort > m_serial_port;


И попробовал удалить m_serial_port (reset), абсолютно тоже самое. Ловил ошибки QSerialPort::PermissionError и другие тоже. Пробовал закрывать, удалять, очищать буферы ни какого толку. Хоть на boost::asio переходи, там такого не было.
Есть подозрение, что это все таки бага Qt.
IndyStar
Решение в обработчике ошибок вызвать второй раз close.
IndyStar
Ошибка все еще происходит!
Соединились. Далее кидаем в порт данные, по таймеру раз в 100 мс, получаем данные. В этот момент выдергиваем устройство. Данные по таймеру продолжают отправляться в порт (ни каких ошибок нет!). Далее жмем отключиться. Тут то и происходит вышеописанное зависание. На Qt 5.4 тоже самое.
Значит нужно:
Либо как-то отследить отключение. Либо что-то сбросить/очистить перед отключением.

Есть варианты?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.