2012-05-02 201 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

相關問題