2014-04-24 18 views
5

La documentazione Qt dà questa spiegazione:Qual è la differenza tra QProcess :: start e QProcess :: startDetached?

  • QProcess::start:

    avvia il programma di data in un nuovo processo, se non è già in esecuzione, passando gli argomenti della riga di comando in argomenti.

  • QProcess::startDetached:

    avvia il programma programma con gli argomenti argomenti in una nuova processo, e si stacca da esso.

Qual è la differenza tra i due? La differenza è che solo è possibile avviare una sola istanza di un programma utilizzando QProcess::start e molte istanze che utilizzano QProcess::startDetached?

risposta

9

Se si utilizza start, la chiusura del processo del chiamante causerà anche la chiusura del processo chiamato. Se si utilizza startDetached, dopo che il chiamante è terminato, il bambino continuerà a vivere. Ad esempio:

QProcess * p = new QProcess(); 
p->start("some-app"); 
delete p;// <---some-app will be terminated 

QProcess * p = new QProcess(); 
p->startDetached("some-app"); 
delete p;// <---some-app will continue to live 
4

La funzione start() è una funzione membro, mentre startDetached è una funzione di classe statica.

Se si guarda al documentation of QProcess, vedrete che ci sono funzioni che consentono di fare le cose con il processo come ad esempio: -

Queste sono solo alcune delle cose che si possono fare solo con un'istanza di un QProcess. Se, tuttavia, vuoi un modo semplice e veloce per avviare un processo senza dover creare un'istanza e non hai bisogno della funzionalità extra, puoi semplicemente chiamare QProcess :: startDetached.

Inoltre, come lo Stato Documenti per startDetached: -

Se il processo chiamante viene, il processo distaccato continuerà a vivere.

+1

Mentre è vero che startDetached() è statico, QProcess: execute() è statico, anche se si desidera eseguire un programma senza un'istanza. Penso che la vera differenza sia il distacco. – lpapp

Problemi correlati