我使用下面的代碼如何檢查某個進程是否正在運行或不
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'。 –