PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu KProcess



TheDodger
10-05-2002, 04:37
Moin!

Ich versuche gerade mehrere prozesse mittels KProcess auszuführen, deren einzelne Rückgabewerte ich benötige.

allerdings bekomme ich diesen nur vom letzten Prozess!
Vielleicht ist meine Herangehensweise auch falsch?



void KAVMailGate::init()
{
proc = new KProcess();

connect( proc, SIGNAL( processExited( KProcess * ) ), this, SLOT( slotExited( KProcess * ) ) );

[...]
checkDeamons();
}

[...]

void KAVMailGate::checkDeamons()
{
procMode = DEAMON_CHECKavgated; // define to 0
proc->clearArguments();
*proc << "checkproc" << "/usr/sbin/avgated";
proc->start( KProcess::NotifyOnExit, KProcess::All );

procMode = DEAMON_CHECKavgatefwd; // define to 1
proc->clearArguments();
*proc << "checkproc" << "/usr/sbin/avgatefwd";
proc->start( KProcess::NotifyOnExit, KProcess::All );
}

[...]

void KAVMailGate::slotExited( KProcess* kProc )
{
int i, j;

i = kProc->exitStatus();
j = kProc->normalExit();

qDebug( "'%u' = '%u' - '%u'", procMode, i, j );
}


Wenn ich das Programm ausführe steht procMode immer auf 1 ...

Kann ich evtl. KProcess so gar nicht benutzen?
Ich will aber nicht für jeden Prozess den ich starte ein eigenes KProzess erzeugen ... denn dann ich benötige davon ca. 10 Stück :(

Die einzelnen Funktionen habe ich auch schon mal ausgelagert, aber da habe ich das gleiche Problem.

any idea?

TheDodger
10-05-2002, 20:45
Was ich bisher rausgefunden habe ...
Scheinbar werden die beiden proc ANweisungen zwar ausgeführt, doch die letzte Überschreibt alles, was in proc->exitStatus() drin steht.
Mit einem 2. KProcess funktioniert dann auch der Aufruf, allerdings werden hier die Ergebnisse ebenfalls verfälscht, da ich ja mittels procMode unterscheide, was gerade aufgerufen wird. Hier muß ebenfalls für jeden Prozess eine Variable erzeugt werden.

Schade, das hier kein lineares vorgehen möglich scheint.
Und das ganze nach einem tag deftigens debuggen ... mir tun die augen weh ...

anda_skoa
12-05-2002, 21:24
Original geschrieben von TheDodger

Schade, das hier kein lineares vorgehen möglich scheint.


Naja, das wäre auch sehr kompliziert und wirklich nicht intuitiv, wenn man mit einem KProcess zwei Prozesse parallel bearbeiten könnte.

Dann müßte man im Slot, der zu processExitted connected ist, immer wissen, wieviele Prozesse gestartet wurden.

Außerdem wäre nicht eindeutig, was zB normalExit() liefert, wenn ein Prozess normal beendet und einer abbricht.

Ciao,
_

TheDodger
13-05-2002, 10:35
Mit linear meinte ich eher den sofortigen Aufruf von processExitted() nach proc->start().
Dann könnte man wirklich sehen, ob dieser Aufruf erfolg hatte oder nicht ...

Aber mittlerweile geht das hier. Man muß eben halt nur wissen, wie die interne Reihenfolge ist.

anda_skoa
13-05-2002, 17:13
Das ist ja ein asynchrones Signal, das kommt erst, wenn du wieder in der eventloop bits.
Wie bei einem timeout() SIgnal eines QTimers.

Ciao,
_