我正在尝试使用QSerialPort(QT 5.3.1)将非常大的文件写入串行端口。问题是-我不断发送的内容超出了设备的处理能力。
编程是这样的(此函数每50ms调用一次):
void MainWindow::sendNext()
{
if(sending && !paused && port.isWritable())
{
if(currentLine >= gcode.size()) //check if we are at the end of array
{
sending = false;
currentLine = 0;
ui->sendBtn->setText("Send");
ui->pauseBtn->setDisabled("true");
return;
}
if(sendLine(gcode.at(currentLine))) currentLine++; //check if this was written to a serial port
ui->filelines->setText(QString::number(gcode.size()) + QString("/") + QString::number(currentLine) + QString(" Lines"));
ui->progressBar->setValue(((float)currentLine/gcode.size()) * 100);
}
}
但是它最终会出现缺陷并挂起(在设备上,而不是在PC上)。只要能以某种方式检查设备是否已准备好用于下一行,但我在QSerial文档中找不到类似的内容。
有任何想法吗?
最佳答案
您可以使用QSerialPort::waitForBytesWritten
来确保写入字节。但是,此函数将阻塞线程,建议在新线程中使用它,否则将阻塞主线程,并且应用程序会定期冻结。
关于c++ - QSerialPort正确发送多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28770862/