PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Externer Process und QTimer



microdigi
25-11-2005, 19:27
Hallo folx, ich denke, Unterstrich wirds wieder erwischen :D

Die Frage ist: Ich sehe keinen QTimer-event, wenn ich aus einem Qt-Object
ein externes Utility (ldapsearch) aufrufe.

Ich starte aus einer Applikation (QT) ein externes Programm 'ldapsearch'.
Das geschieht über einen process:
NEW_OBJ (LDAP_PROCESS, QProcess);
LDAP_PROCESS->addArgument(execution_command); //('ldapsearch')
ADD_PROCESS_ARGUMENT_P (LDAP_PROCESS, "LLL");
...mehr parameters
LDAP_PROCESS->start()) // here we go, and return immediately
...
do
{
...

} while (LDAP_PROCESS->isRunning() );

Ich sehe (natürlich) auch kein update des GUI, von dem das aufgerufen wird; das ist verständlich.
Aber ich kann aus der Schleife heraus einen update() erfolgreich ausführen.

Das ganze rennt gut,
nur ich kriege einen Timer-event überhaupt nicht mit, der zu der Zeit abläuft (ablaufen soll).

Den Timer-event habe ich sowohl wie üblich vorher aus der Applikation heraus aufgesetzt,
NEW_OBJ (ldap_check_network_timer, TMR());
als auch 'an den process' gebunden, nachdem der gebaut wurde:
NEW_OBJ (ldap_check_network_timer, TMR(LDAP_PROCESS));
Beides mit dem üblichen Slot-Verfahren.
Der QTimer lebt, das sehe ich, aber er schiesst nicht.

Ich benutze QTimer schon seit drei Jahren,
aber hier erstaune ich, dass da nichts ankommt.

Wohl (Vermutung) weil das laufende 'ldapsearch' alles krallt. :confused:

Irgend ein Tipp was bei meinem Denken klemmt?

Danke - digi

anda_skoa
28-11-2005, 14:23
QProcess läuft im Hauptthread, dem GUI Thread bzw der Haupteventloop.

Diese bearbeitet auch die Timer und GUI Events.

Wenn du diesen Thread über die Schleife blockierst, kann er seine anderen Aufgaben so lange nicht erledigen, bis er wieder zurück ist.

Einen QProcess benutzt man daher wie andere Eventloop entkoppelte Klassen über deren Signals, d.h. starten, aus der Methode zurückkehren und dann auf die Signals der Instanz reagieren.

Ciao,
_

microdigi
28-11-2005, 15:12
Oh, DAS ist der Grund, erklärt manche Kopfschmerzen :D

Sachma, Unterstrich, wie ist das denn mit dem ...-Studenten?
Du mußt doch langsam mal Deine Prüfung(en) mit Glanz bestanden haben.... :)
Du möchtest doch diesem Forum zu Ehren nicht ein paar Ehrenrunden drehen..? Kann ich mir bei Deinem Wissen nicht vorstellen.

Aloha - und DANKE - digi


QProcess läuft im Hauptthread, dem GUI Thread bzw der Haupteventloop.

Diese bearbeitet auch die Timer und GUI Events.

Wenn du diesen Thread über die Schleife blockierst, kann er seine anderen Aufgaben so lange nicht erledigen, bis er wieder zurück ist.

Einen QProcess benutzt man daher wie andere Eventloop entkoppelte Klassen über deren Signals, d.h. starten, aus der Methode zurückkehren und dann auf die Signals der Instanz reagieren.