Qt und Threads
-
Hallo,
ich versuche mich gerade ein wenig in Qt und habe nun ein Problem mit Threads. Ich möchte gerne, dass ein Programm parallel zu meiner GUI läuft. Ich möchte zudem das der Thread ein eigenes Objekt ist.
Aufrufen tue ich das so:
Qstat *qstat = new Qstat(this); qstat->run();
Die qstat.h:
#include <QtCore> class Qstat : public QThread { Q_OBJECT public: Qstat(QObject *parent = 0); ~Qstat(); void run(); };
Die qstat.cpp:
#include "qstat.h" Qstat::Qstat(QObject *parent) : QThread(parent) { } Qstat::~Qstat() { } void Qstat::run() { system("program"); }
Dies funktioniert im Großen und Ganzen auch, leider passiert das aber nicht parallel sondern hintereinander. Was mache ich falsch?
-
system() ist eine std c++ funktion.
Wenn es unter Qt parallel laufen soll, dann musst du http://doc.trolltech.com/4.3/qprocess.html QProcess verwenden. Von QThread musst du dann auch nicht mehr ableiten..
-
Danke für den Tipp, aber ich möchte die Ausgabe des Programmes aber weiterverarbeiten, dazu benötige ich einen Thread.
-
Hast du die Beschreibung von QProcess wenigstens gelesen?
Nein? Ja stimmt, sonst wuerdest du ja wissen, dass man die Ausgabe weiterverarbeiten kann..
-
also qprocess ist von qiodevice abgeleitet, das heißt, dass du die normalen io-befehle benutzen kannst, um mit dem von dir gestarteten prozesses zu kommunizieren. es gibt auch signals (readyReadStandardError() u. readyReadStandardOutput()) für eingehende daten. wenn du die nutzt, ist es eigentlich nicht nötig einen seperaten thread zu eröffnen.
-
Es sollte auch möglich sein QProcess in einem Thread zu benutzen.
Aber ich bin noch nicht sicher, warum der system Aufruf nicht geklappt hat. Hast du ein vollständiges Programm, das man mal selbst testen kann?
-
Danke für die vielen Tipps. Ich habe jetzt herausgefunden warum es nicht geklappt hat.
Wenn ich anstatt
qstat->run();
das hier schreibe:
qstat->start();
funktioniert es!