4

以下のコードを使用してプロセスを開始しています

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

start メソッドは、サードパーティのアプリケーションを開始します。

プロセスが既に実行されている場合は、もう一度 process->start(Path) を呼び出すべきではありません。

プロセス ポインターは、クラスのプライベート メンバーです。

4

2 に答える 2

12

QProcessのドキュメントから...

QProcessインスタンスが実行されているかどうかを確認するには、少なくとも3つの方法があります。

QProcess.pid():実行中の場合、pidは>0になります

QProcess.state()ProcessState列挙型をもう一度チェックして、QProcess::NotRunningかどうかを確認します

QProcess.atEnd():これがtrueの場合は実行されません

これらのいずれかが期待どおりに機能しない場合は、その例の特定のケースを投稿する必要があります。

于 2012-05-02T22:09:52.540 に答える
2

@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.

ドキュメントはこちらです。

于 2016-08-30T22:21:23.017 に答える