2012-05-02 202 views
3

我使用下面的代码如何检查某个进程是否正在运行或不

QProcess* process = new QProcess(); 
process->start(Path); 

start方法将启动第三方应用程序启动的过程。

如果进程已经运行,我不应该再次调用process-> start(Path)。

进程指针是类的私有成员。

+0

你看过文档吗?至少有3种不同的方式可以知道QProcess是否正在运行。 – jdi

+0

@jdi - 我试过QProcess函数,但它总是在不停地运行。 –

+0

注意上面的语法。要么通过手动调用它来破坏它,要么执行'QProcess * process = new QProcess(this);'而不是如果你的类继承自'QObject'。 –

回答

5

docs for QProcess ...

至少有3种方式来检查QProcess中的实例在运行。

QProcess.pid():如果其运行时,PID会> 0

QProcess.state():再次检查它的ProcessState枚举,看看它QProcess中:: notrunning状态

QProcess.atEnd():它没有运行,如果这是真的

如果其中任何一个不像您期望的那样工作,那么您将需要发布该示例的特定案例。

+0

谢谢jdi,我认为我实施错误,直接使用流程指针我检查了NotRunning枚举。我会再试一次。 –

+1

@TimeRunCit:我不是一个C++的人,但只是好奇......如果进程是一个私有成员,并且执行'QProcess * process = new QProcess();',那么每个进程都不会使用本地作用域版本时间? – jdi

+0

你是对的,@ jdi-当处理多个进程时,这令人烦恼。当检查一个列表指向一个新的进程对这些检查的任何一个,你会得到误报。 –

1

要与现实生活中的代码示例补充@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

相关问题