QProcess status

Alles rund um die Programmierung mit Qt
Theranium
Beiträge: 50
Registriert: 16. November 2007 15:09
Wohnort: NRW

QProcess status

Beitrag von Theranium »

Hallo Leute,
ich habe mal folgende Frage: wie kann ich herausfinden, ob ein Prozess erfolgreich beendet worden ist?
Wenn ich beispielsweise einen ping-Prozess starte, möchte ich den abschließend nach dem Ampel-Prinzip auswerten.

Code: Alles auswählen

editor1->setText(entries);
       	
       	// start ping
       	asynchron->start("ping", QStringList() << "-c 1" << i.value());
		
		if(asynchron.state() != QProcess::Running)
		{
			entries.append(" \t - OK - \n\n");
       		i++;
       	}
Ich sehe ausser dem Eintrag kein OK, so als ob auf das Ende des Prozesses gewartet würde.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Mit state kannst du überprüfen ob der Prozess noch läuft. Wenn er vorbei ist kannst du mit exitCode den Exit Code abrufen.
Theranium
Beiträge: 50
Registriert: 16. November 2007 15:09
Wohnort: NRW

Beitrag von Theranium »

Hi PeterLustig,
kannst du mir das mal genauer erklären?
Ich bekomme beim Kompilieren iregendwie immer die Fehlermedlung,
dass asynchron ein Element des Nicht-Klassentyps sei QProcess, und darum state gar nicht abgefragt werden könne. Aber asynchron ist natürllich eine Instanz von QProcess.
Kannst du was damit anfangen?
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Weil du kein C++ kannst.
Theranium
Beiträge: 50
Registriert: 16. November 2007 15:09
Wohnort: NRW

Beitrag von Theranium »

QProcess ist doch eine Klasse, oder nicht!
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Lerne einfach erst einmal C++, bevor du ein Framework wie Qt benutzt.
Theranium
Beiträge: 50
Registriert: 16. November 2007 15:09
Wohnort: NRW

Beitrag von Theranium »

Das hilft mir jetzt auch nicht wirklich.
Aber du hast recht. Da du ja C++ kannst, kannst du mir vielleicht einen Tip geben?
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Ja: Lerne C++ zuerst.
Theranium
Beiträge: 50
Registriert: 16. November 2007 15:09
Wohnort: NRW

Beitrag von Theranium »

Naja, diesen Tip kannte ich schon, und du kannst mir glauben: ich lerne noch. Aber du hast offenbar auch keine Idee, was das Problem in diesem Programm ist.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Ich weiß woran der Fehler liegt.
Du lernst einfach falsch. Lerne nicht mit einem Framework wie Qt, lerne zuerst die Sprache selbst, sonst wirst du wie jetzt immer wieder auf die Schnauze fallen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was spricht dagegen einfach das Signa finished() auszuwerten?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Christian81 hat geschrieben:Was spricht dagegen einfach das Signa finished() auszuwerten?
Was spricht dagegen ihm einfach zu sagen er soll C++ lernen? Er kann offensichtlich kein C++, sonst wüsste er wie man auf Zeiger zugreift.
JensL
Beiträge: 13
Registriert: 13. September 2007 15:08

Re: QProcess status

Beitrag von JensL »

Hallo Theranium,

schau Dir mal folgende beide Zeilen an, fällt dir da was auf?

Code: Alles auswählen

asynchron->start("ping", QStringList() << "-c 1" << i.value());

Code: Alles auswählen

if(asynchron.state() != QProcess::Running)
Das ist zumindest das, worauf meine Vorposter versucht haben Dich hinzuweisen. (naja mehr oder weniger zumindest)

Vieleicht wars ja nur ein Tippfehler? Für den Fall das Du die Problematik hier nicht erkennst schau Dir am besten nochmal das Thema Zeiger an.

Gruß Jens
Theranium
Beiträge: 50
Registriert: 16. November 2007 15:09
Wohnort: NRW

Beitrag von Theranium »

Was mir jetzt auffällt ist, dass ich einmal "->" und einmal "." benutze, um eine Funktion auszuführen. Da habe ich so gar nicht darauf geachtet. Korrigier mich, wenn ich falsch liege, aber ich sollte wohl den "Punkt" durch einen "Pfeil" (keine Ahnung, wie dieser Operator heißt) ersetzen, da es sich bei asynchron um ein dynamisches Speicherobjekt handelt. Dafür kommt der Punkt-Operator nicht in Frage.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

asynchron ist ein Pointer, ein Zeiger. Er zeigt auf einen Bereich im Speicher. Mit dem Pfeil Operator -> greift man auf das Objekt zu, worauf der Zeiger zeigt.

C++ Grundwissen.
Antworten