crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSerialPort зависает при попытки закрытии порта
IndyStar
  опции профиля:
сообщение 17.12.2014, 9:47
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.12.2014
Пользователь №: 4295

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток!
ПО: 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
  опции профиля:
сообщение 17.12.2014, 10:46
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.12.2014
Пользователь №: 4295

Спасибо сказали: 0 раз(а)




Репутация:   0  


Решение в обработчике ошибок вызвать второй раз close.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
IndyStar
  опции профиля:
сообщение 17.12.2014, 13:04
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 17.12.2014
Пользователь №: 4295

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ошибка все еще происходит!
Соединились. Далее кидаем в порт данные, по таймеру раз в 100 мс, получаем данные. В этот момент выдергиваем устройство. Данные по таймеру продолжают отправляться в порт (ни каких ошибок нет!). Далее жмем отключиться. Тут то и происходит вышеописанное зависание. На Qt 5.4 тоже самое.
Значит нужно:
Либо как-то отследить отключение. Либо что-то сбросить/очистить перед отключением.

Есть варианты?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 18:12