Russian Qt Forum

Qt => Работа с сетью => Тема начата: brucemax от Октябрь 16, 2012, 13:35



Название: Непонятное поведение приложения при открытии com-порта
Отправлено: 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);
         }


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: brucemax от Октябрь 16, 2012, 13:46
Сча обнаружил, что если начать перетаскивать окошко, то всё начинает работать как надо, присланные данные сразу выводятся в окно. Видимо что-то сильно грузит поток.  Или я чего-то недопонимаю...


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: alex312 от Октябрь 16, 2012, 14:47

Код:
...  
    getText+=QString::QString (temp_data);
    ui->teRecieve->setText(getText);
...
Это причина тормозов.


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: kuzulis от Октябрь 16, 2012, 14:53
Цитировать
Использую библиотечку qserialdevice.
Лучше эту  (http://qt-project.org/wiki/QtSerialPort_Russian)использовать.


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: brucemax от Октябрь 16, 2012, 14:59
Отладка показала, что с момента подключения порта, в файле qeventdispatcher_win.с прога постоянно имеет msg.message == WM_TIMER. Я так понял, что это какое-то событие от какого-то таймера, но вот понять что за оно и что оно значит пока квалификации не хватает.


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: brucemax от Октябрь 16, 2012, 15:02

Код:
...  
    getText+=QString::QString (temp_data);
    ui->teRecieve->setText(getText);
...
Это причина тормозов.
Вы не правы, закомментил обе строки, эффект остался. Да и не понятно мне чем они могут загрузить прогу.


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: brucemax от Октябрь 16, 2012, 15:03
Цитировать
Использую библиотечку qserialdevice.
Лучше эту  (http://qt-project.org/wiki/QtSerialPort_Russian)использовать.
Спасибо!!! Попробую.


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: Fregloin от Октябрь 16, 2012, 17:09
как вариант запустите экземпляр компорта в отдельном потоке


Название: Re: Непонятное поведение приложения при открытии com-порта
Отправлено: brucemax от Октябрь 17, 2012, 10:06
как вариант запустите экземпляр компорта в отдельном потоке
Да подумываю об этом. Спасибо!