我使用下面的代码如何检查某个进程是否正在运行或不
QProcess* process = new QProcess();
process->start(Path);
start方法将启动第三方应用程序启动的过程。
如果进程已经运行,我不应该再次调用process-> start(Path)。
进程指针是类的私有成员。
我使用下面的代码如何检查某个进程是否正在运行或不
QProcess* process = new QProcess();
process->start(Path);
start方法将启动第三方应用程序启动的过程。
如果进程已经运行,我不应该再次调用process-> start(Path)。
进程指针是类的私有成员。
从docs for QProcess ...
至少有3种方式来检查QProcess中的实例在运行。
QProcess.pid():如果其运行时,PID会> 0
QProcess.state():再次检查它的ProcessState枚举,看看它QProcess中:: notrunning状态
QProcess.atEnd():它没有运行,如果这是真的
如果其中任何一个不像您期望的那样工作,那么您将需要发布该示例的特定案例。
谢谢jdi,我认为我实施错误,直接使用流程指针我检查了NotRunning枚举。我会再试一次。 –
@TimeRunCit:我不是一个C++的人,但只是好奇......如果进程是一个私有成员,并且执行'QProcess * process = new QProcess();',那么每个进程都不会使用本地作用域版本时间? – jdi
你是对的,@ jdi-当处理多个进程时,这令人烦恼。当检查一个列表指向一个新的进程对这些检查的任何一个,你会得到误报。 –
要与现实生活中的代码示例补充@jdi的回答是:
QString executable = "C:/Program Files/tool.exe";
QProcess *process = new QProcess(this);
process->start(executable, QStringList());
// some code
if (process->state() == QProcess::NotRunning) {
// do something
};
QProcess::ProcessState
常数是:
Constant Value Description
QProcess::NotRunning 0 The process is not running.
QProcess::Starting 1 The process is starting, but the program has not yet been invoked.
QProcess::Running 2 The process is running and is ready for reading and writing.
文档是here。
你看过文档吗?至少有3种不同的方式可以知道QProcess是否正在运行。 – jdi
@jdi - 我试过QProcess函数,但它总是在不停地运行。 –
注意上面的语法。要么通过手动调用它来破坏它,要么执行'QProcess * process = new QProcess(this);'而不是如果你的类继承自'QObject'。 –