私はシリアルデバイスで作業しています。 QSerialPortは別のスレッドにあります。 スレッドは、このように作成されます。QSerialPort - 送信者からのデータ全体の払い戻し
QThread* serialthread = new QThread;
Serial* serial = new Serial();
serial->moveToThread(serialthread);
データはemitedされ、私のスレッドワーカーで、この信号を利用可能である
:これは、データが正しい場合は、データとチェックを読み込む機能がvoid Serial::process()
{
serialport = new QSerialPort();
connect(this->serialport,SIGNAL(readyRead()),this,SLOT(readyToRead()));
}
void Serial::readyToRead()
{
emit SIG_dataAvailable(this->read());
}
です - 私のシリアルデバイス上の2番目のバイトは私の問題は、信号QSerialPort :: readyReadがダ前emitedされていることである
QByteArray Serial::read() const
{
QByteArray receivedData;
int length;
receivedData = serialport->readAll();
length = receivedData[1];
if(length != receivedData.length() - 1)
{
qDebug() << "protocol error.";
return NULL;
}
return receivedData;
}
...パケットの残りの部分がどのように長いと言いますtaがバッファ内で完結していることを確認します。任意のアイデアはどのようにこの問題を解決するには?
でいくつかのより複雑な例を見ることができる私はdifferntスレッド内メートルQserialを置くので、私車のECUをリアルタイムで監視したい私はメインウィンドウのプロセスでそれを試しましたが、guiは非常に遅いです –
私は、 "ブロック"(非同期)マナーでQSerialPortを使用しているため、フリーズしていると思います。そのため、http://code.qt.io/cgit/qt/qtserialport.git/tree/src/serialport/qserialport.cpp#n201がフリーズしています – YouDoItWrong