QScopedPointer m_Process;
m_Process.reset(new QProcess(this));
connect(m_Process.data(), SIGNAL(readyReadStandardOutput()), this, SLOT(onReadyRead()));
connect(m_Process.data(), SIGNAL(finished()), this, SLOT(onFinished()));
m_Process->setReadChannel(QProcess::StandardOutput);
m_Process->setWorkingDirectory(QCoreApplication::applicationDirPath());
m_Process->start("XXX.exe");
m_Process->waitForFinished(-1);
QString output = m_Process->readAllStandardOutput();
void MyThread::onReadyRead()
{
char buffer[1024];
while(1)
{
int ret = m_Process->readLine(buffer,1024);
if(ret == 0 || ret == -1)
break;
}
}
void MyThread::onFinished()
{
m_Process.disConnectAll();
}
QScopedPointer m_Process;
m_Process.reset(new QProcess(thi

使用QProcess在Linux系统中获取进程列表时,通过信号槽连接实现进程输出的实时读取。遇到的问题是程序在多次运行后崩溃,错误源于`bytes <= bufferSize`。解决方案包括在`onFinished`信号触发后加延迟或在`onReadyRead`中一次性读取所有输出,以确保完整读取且避免程序异常。
最低0.47元/天 解锁文章
5769

被折叠的 条评论
为什么被折叠?



