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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятное поведение приложения при открытии com-порта  (Прочитано 5276 раз)
brucemax
Гость
« : Октябрь 16, 2012, 13:35 »

Соединяюсь с одной отладочной платой по com-порту.  До того как открыть порт всё работает нормально.  Но после начинает всё тормозить. Даже в лайн едитах в фокусе курсор не моргает. Сообщения в текстовое окно выводятся через секунд 15, хотя Debug() в консоль их выводит моментально как-только пришли данные. Тормозят нажатия на все кнопки, кроме кнопки "Закрыть соединение".  Связывался со стандартным терминалом, всё работает нормально. Что это за эффект такой, подскажите пожалуйста!
Использую библиотечку qserialdevice.
Открываю и слушаю порт вот так:
Код:
void CMainWindow::initSerial()
{
    serial = new AbstractSerial(this); // Новый экземпляр класса AbstractSerial
    ui->cbBaud->addItems(serial->listBaudRate());
    connect(this->serial, SIGNAL(readyRead()), this, SLOT(serialRecieve()));
}
Код:
void CMainWindow::serialRecieve() {
    QByteArray temp_data = serial->readLine(); // Заполняем массив данными
    qDebug() << "Reading data is: " << temp_data; 
    getText+=QString::QString (temp_data);
    ui->teRecieve->setText(getText);
}
Настройка порта
Код:
          serial->setDeviceName(ui->lePort->text()); // Порт, который открываем - берём из поля lePort
          if (serial->open(AbstractSerial::ReadWrite))
          {
            ui->leStatus->setText("Port open: "+serial->deviceName());
            qDebug() << "Порт " << serial->deviceName() << " открыт в режиме " << serial->openMode();

            // Классная штука - устанавливать параметры порта можно после открытия
            serial->setBaudRate(ui->cbBaud->currentText()); // Скорость выбираем из выпадающего списка cbBaud
            serial->setDataBits(AbstractSerial::DataBits8);
            serial->setParity(AbstractSerial::ParityNone);
            serial->setStopBits(AbstractSerial::StopBits1);
            serial->setFlowControl(AbstractSerial::FlowControlOff);
         }
Записан
brucemax
Гость
« Ответ #1 : Октябрь 16, 2012, 13:46 »

Сча обнаружил, что если начать перетаскивать окошко, то всё начинает работать как надо, присланные данные сразу выводятся в окно. Видимо что-то сильно грузит поток.  Или я чего-то недопонимаю...
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #2 : Октябрь 16, 2012, 14:47 »


Код:
...  
    getText+=QString::QString (temp_data);
    ui->teRecieve->setText(getText);
...
Это причина тормозов.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Октябрь 16, 2012, 14:53 »

Цитировать
Использую библиотечку qserialdevice.
Лучше эту использовать.
Записан

ArchLinux x86_64 / Win10 64 bit
brucemax
Гость
« Ответ #4 : Октябрь 16, 2012, 14:59 »

Отладка показала, что с момента подключения порта, в файле qeventdispatcher_win.с прога постоянно имеет msg.message == WM_TIMER. Я так понял, что это какое-то событие от какого-то таймера, но вот понять что за оно и что оно значит пока квалификации не хватает.
Записан
brucemax
Гость
« Ответ #5 : Октябрь 16, 2012, 15:02 »


Код:
...  
    getText+=QString::QString (temp_data);
    ui->teRecieve->setText(getText);
...
Это причина тормозов.
Вы не правы, закомментил обе строки, эффект остался. Да и не понятно мне чем они могут загрузить прогу.
Записан
brucemax
Гость
« Ответ #6 : Октябрь 16, 2012, 15:03 »

Цитировать
Использую библиотечку qserialdevice.
Лучше эту использовать.
Спасибо!!! Попробую.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #7 : Октябрь 16, 2012, 17:09 »

как вариант запустите экземпляр компорта в отдельном потоке
Записан
brucemax
Гость
« Ответ #8 : Октябрь 17, 2012, 10:06 »

как вариант запустите экземпляр компорта в отдельном потоке
Да подумываю об этом. Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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