Witam.
Potrzebuje odebrać dane z RS232. Danych tych mam 255 bajtów, może i będzie więcej. Postanowiłem dane te odbierać przy użyciu sygnału ReadReady() łącząc go z pewnym slotem w klasie
QObject::connect(serial , SIGNAL(readyRead()) , this , SLOT(SLOT_ReciveData()))
Wszystko działa. To znaczy dane są odebrane kompletnie, ale... dane te są odbierane w pewnych paczkach po 50, 30 , 40 bajtów, w główniej mierze zależy to od baud-u. W każdym razie suma się zgadza. Wniosek jest z tego taki, że sygnał ReadReady() generowany jest kilkukrotnie, myślę, że wynika to z tego, że potrzeba osobnego wątku, aby to obsłużyć i aby zajął się tym do końca bez przerw po jednym sygnale.
Trafiłem już na temat
http://4programmers.net/Forum/C_i_C++/210633-qt_creator_-_watki?p=918099#id918099
i post Marka, dzięki któremu zrozumiałem koncepcje, ale mam problem z przełożeniem jej na kod u siebie.
Mam pewną klasę, która zajmuje się konfiguracją QSerialport do niej też spróbowałem dodać obiekt wątku:
COM_Configure::COM_Configure(QString name , Okno_GL*parent) :name(name) , parent(parent)
thread = new QThread(this);
serial = new QSerialPort();
serial->moveToThread(thread);
serial->setPortName(name);
serial->setBaudRate(QSerialPort::Baud38400); //this is the samed
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
if(serial->open(QIODevice::ReadWrite))
{
qd "otwarty" ;
}
QObject::connect(serial , SIGNAL(readyRead()) , this , SLOT(SLOT_ReciveData()), Qt::QueuedConnection);
thread->start();
Po próbie dostaje błąd
QObject: Cannot create children for a parent that is in a different thread.
edit:
tutaj slot w którym dobieram
oid COM_Configure::SLOT_ReciveData()
{
qd "Odpowiedz z UC " ;
recive = serial->readAll(); // recive to QBytearray zdekralowana jaki zmienna prywatna w klasie
qd "odebrano dane. Ilosc danych " << recive.size() ;
for(int i = 0 ; i < recive.size() ; i++)
{
qd "Bajt" << i << (unsigned char)recive[i];
}
}
edit 2:
Dokopałem sie do czegoś, ale niezbyt obiecujące stwierdzenie
http://qt-project.org/forums/viewthread/40595