私は、Qtのシリアルポートを通じて約2週間は通信するというプロジェクトに苦労しています。最初に信号/スロット方式を試しましたが、いくつかのデータが欠落していました。それでは、スレッドを使うことにしましたが、同じ結果が得られました。ウィンドウのバーにマウスの左ボタンを置いても、アプリケーションのウィンドウがサイズ変更または最大化/最小化されている間に、データが欠落していました。この状態を助けてください。QSerialPort with thread
メインウィンドウコンストラクタ:
void SerialPort::newData()
{
mutex.lock();
bArray.insert(bArray.length(),serial->readAll());
mutex.unlock();
emit getData(&bArray,&mutex);
}
SERIALPORTコンストラクタ:
SerialPort *serial= new SerialPort();
serial->moveToThread(&cThread);
connect(this , &MainWindow::finished, &cThread, &QThread::quit);
connect(this , &MainWindow::destroyed, this, &SerialPort::deleteLater);
connect(serial, &SerialPort::getData, this, &MainWindow::displayData);
cThread.start();
シリアルポートは、スレッドを読ん
serial = new QSerialPort();
connect(serial, &QSerialPort::readyRead, this, &SerialPort::newData);
bArray.clear();
fill_serial_ports();
portName = find_stm32_port();
serial->setReadBufferSize(20*1024*1024); // it's a huge buffer.
bArray.reserve(20*1024*1024); // it's a huge buffer.
open_serial_port();
はまた、私はこれがどのようなバグでできることを考えましたいくつかのデータが失われ、バグトラッカーに書き込まれました。譲受人は、QSerialPortはデータを失うことはなく、私のコードは間違っていると言いました。私は非常に混乱している、私は間違いをどこにするか分からない。どうぞ、私の他の解決策をチェックできますか?間違いはどこですか?
私のバグトラッカーレポート(受け入れられない):https://bugreports.qt.io/browse/QTBUG-61233
いくつかのコード例を参考にしてください。 –
トピックをオフにしていますが...もしあなたのシングルスレッドコードがポートからデータを失っていたら、そのコードを別のスレッドに移動させるだけで*本当の*問題をデバッグするのが難しくなると感じるのを助けることはできません。 –
シリアルポートから巨大なデータを受信する場合は、いくつかのreadyRead信号から受信したデータを蓄積する必要があります。 – Jeka