Prozess asyn starten

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
gast23
Beiträge: 103
Registriert: 11. August 2010 10:43

Prozess asyn starten

Beitrag von gast23 »

Hallo,

wie kann ich einen System call asynchron ausführen?

d.h. ich will system("./xcc"); jedoch soll mein Code nicht wie bei system() oder qprozess blockieren sondern nur den befehl weiter ans betriebssystem schcken

viele grüße
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Was du suchst ist
http://doc.qt.nokia.com/latest/qprocess.html

BTW: Das nennt man "einen Prozess asynchron starten".. ein "System call" ist was anderes ;)

hth!
gast23
Beiträge: 103
Registriert: 11. August 2010 10:43

Beitrag von gast23 »

das problem mit qprocess ist aber ich kann kein stack objekt verwenden d.h. nach dem die methode durchgelaufen ist wird es gelöscht und ich erhalte die warnung das der prozess noch nicht fertig ist... ich möchte das objekt aber auch nicht auf dem heap anlegen da die klasse nicht gelöscht wird...
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

gast23 hat geschrieben:...ich möchte das objekt aber auch nicht auf dem heap anlegen da die klasse nicht gelöscht wird...
Verstehe ich nicht...was hat das eine mit dem anderen zu tun? Du kannst die Lebensdauer der QProcess-Instanz unabhängig beliebiger anderer Instanzen bestimmen..
gast23
Beiträge: 103
Registriert: 11. August 2010 10:43

Beitrag von gast23 »

Wie??

Code: Alles auswählen

methode() {

qprocess a;
a.start();

}
das klappt nicht..
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Schonmal was von 'new' und 'delete' gehört? -> C++ Grundlagen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

gast23 hat geschrieben:ich möchte das objekt aber auch nicht auf dem heap anlegen da die klasse nicht gelöscht wird...
Eine Klasse wird eh nie gelöscht, so eine Instanz der Klasse.
Was willst du denn am Ende mit dem QProcess-Objekt anstellen? Soll diese Methode öfter hintereinander ausgeführt werden, so dass am Ende mehrere Prizesse gleichzeitig laufen? Möchtest du mit dem Prozess kommunizieren? Oder soll der Prozess nur gestartet werden, und dir ist danach schnuppe, ob alles klar gegangen ist, was der Prozess auf stderr schreibt, etc?
Bei letzterem: Schau dich in der "static"-Section zu QProcess in der Doku um. Da gibt es "QProcess::startDetached()"
gast23
Beiträge: 103
Registriert: 11. August 2010 10:43

Beitrag von gast23 »

startDetached danke!

hatte ich übersehen :)

new qprozess();
q->start();
delete q;

super christian das würde den prozess nicht mals ausführen...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

z.B. so wenn man startDetached nicht benutzen will weil man mehr Infos braucht:

Code: Alles auswählen

QProcess *p = new QProcess
connct(p, SIGNAL(finished(int, QProcess::ExitStatus), p, SLOT(deleteLater());
p->start()
if(!p->waitForStarted()) {
  qDebug("Kann Prozess nicht starten");
}
Oder was man auch immer damit anstellen will... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Wenn Dein prozess nur die "funktion/Methode" überleben soll, wird es sicher ne andere Instanz geben, die mehr Lebenszeit aufweisst als die Funktion -> Da kannst sicher dein QProcess verwalten lassen.

Soll dein Prozess aber sogar dein programm an sich ueberleben koennen (Und dein Programm soll wirklich beendet sein, und nicht nur "unsichtbar" bis der andere Prozess sich beendet), ist qprocess auch der Falsche weg. Dann wirst mit BS funktionen besser bedient sein.

Ciao ...
Antworten