作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在线程内使用QProcess进行一些操作(读取I2C连接)。update方法每100毫秒调用一次:
void TempsReader::update()
{
if (_currProcess == nullptr) {
_currProcess = new QProcess();
connect(_currProcess, &QProcess::errorOccurred, this, &TempsReader::onProcessError);
connect(_currProcess, SIGNAL(finished(int,QProcess::ExitStatus)),
this, SLOT(onProcessFinished()));
}
_currProcess->start("sh");
if (_currProcess->waitForStarted()) {
_currProcess->write("i2cdetect -y 1");
_currProcess->closeWriteChannel();
_currProcess->waitForFinished();
}
}
void TempsReader::onProcessError(QProcess::ProcessError error)
{
qDebug() << error;
_currProcess->close();
}
void TempsReader::onProcessFinished()
{
QString devs = _currProcess->readAll();
_currProcess->waitForFinished();
// doing some stuff with devs
_currProcess->close();
}
最佳答案
我的猜测是您失败了,因为所有update()
调用都共享同一个QProcess
对象。
这里发生的是,当您调用update()
时,就开始了该过程。而在100毫秒之后,您无需确保先前的update()
已经完成以等待过程结束就再次调用它。
结果是您尝试启动一个已经开始的进程,因此失败。
对我来说,最简单的解决方案是为每个QProcess
调用创建一个update()
对象。
就像是:
void TempsReader::update()
{
QProcess * current_process = new QProcess;
connect(current_process, &QProcess::errorOccured, this, &TempReader::onProcessError);
connect(current_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &TempReader::onProcessFinished());
current_process->start("sh"); // Your command
current_process->waitForStarted();
current_process->write("i2cdetect -y 1");
current_process->waitForFinished();
current_process->deleteLater();
}
void TempsReader::update()
{
QProcess current_process;
connect(¤t_process, &QProcess::errorOccured, this, &TempReader::onProcessError);
connect(¤t_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &TempReader::onProcessFinished());
current_process.start("sh"); // Your command
current_process.waitForStarted();
current_process.write("i2cdetect -y 1");
current_process.waitForFinished();
}
关于c++ - QProcess多次启动后给出FailedToStart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59392642/
我正在尝试将序列化图像传递到我在 Qt 程序中启动的进程。但是,这样做时我收到此错误消息: QObject::connect: Cannot queue arguments of type 'QPro
我是一名优秀的程序员,十分优秀!