程序是一个读串口数据,在界面上显示。采用了多线程,子线程读取串口数据后发送给主线程,主线程进行显示。
connect(&serial_1, &QSerialPort::readyRead,this, &MainWindow::startTimer); ///主线程收到readyRead信号后,启动定时器延时300ms,确保接收数据完整 connect(qtime, SIGNAL(timeout()),serialWorker, SLOT(doDataReciveWork())) //延时后,子线程doDataReciveWork()函数调用串口readAll函数读取缓冲数据connect(serialWorker,&SerialWorker::sendResultToGui,this,handleResults); 子线程读取缓冲完整数据后发送信号,主线程收到数据后,进行解析,在GUI上显示程序连续跑了一星期,突然崩溃。定位到ui->textEdit->setText(qstring);崩溃。ui->textEdit->setText(qstring);是在主线程GUI线程中调用的。