crossplatform.ru

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

> проблемы с чтением из ком-порта, переполнение буфера
Widget
  опции профиля:
сообщение 19.10.2009, 16:50
Сообщение #1


Новичок


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

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




Репутация:   0  


Всем добрый день!
Есть ГПИ, который выводит данные из ком-порта в таблицу.Чтение порта происходит постоянно в отдельном потоке.Данные идут непрерывно!
Буквально через пару секунд после включения данные начинают выводится рывками.И самое интересное: если отключить устройство от ком порта данные еще некоторое время идут!
вот исходник:
Thread::Thread(QThread *parent)
    : QThread(parent)
{
    status=false;
    marker=0;
    num=0;
    serialDevice=new TSerialDevice("COM1");
    moveToThread(this);
}

Thread::~Thread()
{
    serialDevice->close();
    delete serialDevice;
    serialDevice=0;
}

void Thread::stop()
{
    status=false;
}

void Thread::run()
{
    status=true;
    if(!(serialDevice->open(QIODevice::ReadOnly|QIODevice::Unbuffered))){
        emit massage(serialDevice->deviceName()+" not open!");
        status=false;
    }
    setCOM();
    emit massage("baudrate=\t"+serialDevice->baudRate());
    while(status){
        read();
    }
    serialDevice->close();
    emit massage("Stop");
    return;
}

void Thread::read()
{
    nav_arr.clear();
    arr.clear();
//    marker=0;
//    num=0;
    arr=serialDevice->read(4);
    marker=(((arr.at(3)<<24)&0xFF000000)|((arr.at(2)<<16)&0xFF0000)
            |((arr.at(1)<<8)&0xFF00)|(arr.at(0)&0xFF));
    switch(marker){
    case 0x75868A53:
        arr+=serialDevice->read(4);
        num=(((arr.at(7)<<24) & 0xFF000000)|((arr.at(6)<<16) & 0xFF0000)|
            ((arr.at(5)<<8) & 0xFF00)|((arr.at(4)<<0) & 0xFF));
        nav_arr=serialDevice->read(88+24*num);
        emit data(nav_arr,marker,num);
        break;
    }
    return;
}
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 6.6.2020, 22:21