例如:
void MainWidget::testThreadTask() { qDebug() << "On test task"; } void MainWidget::onBtnClick() { QThread *thread = new QThread; connect(thread, QThread::started, this, testThreadTask); thread->start(); qDebug() << "Thread START, now we wait 5s"; QElapsedTimer timer; timer.start(); while (timer.elapsed() < 5000) { } qDebug() << "END"; }
程序输出为:
START wait 5s END On test task
我想在按下按钮后创建一个任务来处理一些事情,然后函数将等待任务完成后再返回。
事实上,可能不需要创建一个新任务并等待它执行,因为既然你必须等待并陷入其中,为什么不直接在函数中运行它呢。
但当我处理QT串行数据时,这实际上是一个问题。我想在按下按钮后将数据发送到串行端口,然后等待数据(通过不断读取),但我发现,当我一直等待时,串行端口根本无法读取数据,只有当我退出该功能时串行端口才能读取数据。
有没有办法处理串行数据发送和接收同步?
void MainWidget::onBtnClick() { serial->write("Test"); if (serial->bytesAvailable()) { QByteArray data = serialIo->readAll(); // handle the data } }