我有一个 Q_Object 类。 在本课程中,我想使用发送和停止函数来启动和停止进程
我的发送功能工作正常,当我单击它时,我的进程正在运行,但是当我单击停止功能时,它不工作,因为我无权访问 processId 我该如何解决这个问题??
class Simulator : public QObject
{
Q_OBJECT
public:
explicit Simulator(QObject *parent = nullptr);
~Simulator();
EnvHandler *envHandler = new EnvHandler;
signals:
public slots:
Q_INVOKABLE void send();
Q_INVOKABLE void stop();
private:
QProcess *m_process;
qint64 pId;
};
#include "Simulator.h"
#include <QThread>
#include <iostream>
#include <thread>
#include <QTimer>
#include <fstream>
Simulator::Simulator(QObject *parent)
: QObject{parent} , m_process(new QProcess(this))
{
}
void Simulator::send()
{
QString path = envHandler->env_MERSAD_HOME() +"/Bin/Module/DataGenerator";
m_process->startDetached(path);
pId = m_process->processId();
}
void Simulator::stop()
{
QString command = "kill -9 " + QString::number(pId);
m_process->execute(command);
}
Simulator::~Simulator()
{
}
问题似乎是您在进程分离后尝试检索进程 ID。您可以更改调用 startDetached 的方式,以便它为您提供 ID。那么你应该能够杀死它。
void Simulator::send()
{
QString path = envHandler->env_MERSAD_HOME() +"/Bin/Module/DataGenerator";
m_process->setProgram(path);
m_process->startDetached(&pId);
}