2012-05-02 7 views
3

Je commence un processus utilisant le code ci-dessousComment vérifier si un processus est en marche ou non

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

La méthode de démarrage commencera une application tierce.

Si le processus est déjà en cours, je ne devrais pas appeler à nouveau process-> start (Path).

Le pointeur de processus est un membre privé de la classe.

+0

avez-vous regardé les docs? Il y a au moins 3 façons différentes de savoir si le processus Q est en cours d'exécution. – jdi

+0

@jdi - J'ai essayé les fonctions QProcess, mais elles ont toujours été ignorées. –

+0

Attention à la syntaxe ci-dessus. Soit assurez-vous qu'il soit destructeur en l'appelant manuellement, soit faites 'QProcess * process = new QProcess (this);' à la place si votre classe hérite de 'QObject'. –

Répondre

5

De l'docs for QProcess ...

Il y a au moins 3 façons de vérifier si une instance QProcess est en marche.

QProcess.pid(): Si son fonctionnement, le pid> 0

QProcess.state(): Réessayez la ProcessState ENUM pour voir si son QProcess :: NotRunning

QProcess.atEnd(): Son ne fonctionne pas si cela est vrai

Si l'une d'entre elles ne fonctionne pas comme prévu, vous devrez alors publier un cas spécifique de cet exemple.

+0

Merci jdi, je pense que j'ai mis en œuvre à tort, en utilisant le pointeur de processus directement j'ai vérifié l'énumération NotRunning. Je vais essayer à nouveau correctement. –

+1

@TimeRunCit: Je ne suis pas un type C++ mais juste curieux ... Si process est un membre privé, et que vous faites 'QProcess * process = new QProcess();', ne l'observe-t-il pas avec une version locale? temps? – jdi

+0

Vous avez raison, @jdi - cela a été vexant lorsqu'il s'agit de plusieurs processus. Lors de la vérification d'une liste de pointeurs vers un nouveau processus par rapport à l'une de ces vérifications, vous obtiendrez des faux positifs. –

1

Pour compléter la réponse de @jdi avec un exemple de code de la vie réelle:

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 constantes sont:

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. 

La documentation est here.

Questions connexes