QThread für lange Berechnung

Alles rund um die Programmierung mit Qt
Antworten
Eddie
Beiträge: 14
Registriert: 17. Juli 2007 19:36

QThread für lange Berechnung

Beitrag von Eddie »

Hallo zusammen,

ich habe eine langwierige Berechnung, die zweimal mit jeweils unterschiedlichen unabhängigen Daten ausgeführt werden muss. Ich dachte, die Berechnung kann man auf einem Dual-Core-Rechner gut in eine QThread-Klasse packen und diese dann zweimal aufrufen, so dass beide Datensätze gleichzeitig abgearbeitet werden. Nach dem Start der beiden Threads möchte ich in der Hauptanwendung auf das Ende beider Threads warten und dann soll es mit der Verarbeitung beider Ergebnisse weiter gehen.

Mein Versuch:
in der Hauptanwendung:

Code: Alles auswählen

SPromtKBBTransformThread *pTransformThread1, *pTransformThread2;
pTransformThread1 = new SPromtKBBTransformThread();
pTransformThread1->init( /* Daten übergeben */);
pTransformThread2 = new SPromtKBBTransformThread();
pTransformThread2->init( /* andere Daten übergeben */ );

pTransformThread1->start();
pTransformThread2->start();
pTransformThread1->wait();
pTransformThread2->wait();

// Ergebnisse beider Threads weiter verarbeiten
der Thread selbst:

Code: Alles auswählen

void SPromtKBBTransformThread::run(void)
{
// ohne while-Schleife: ganz viel rechnen
}
Mein Problem:
- Manchmal melden beide Threads, dass sie gestartet wurden - manchmal meldet sich der 2. Thread nicht.
- keiner der Threads kommt an sein Ende (werden sie evtl. durch wait() beendet?)

Mache ich grundsätzlich etwas falsch?
Ich bin für jede Hilfe dankbar.

Ed
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Mit wait() ohne Parameter wartest du die nächsten 1000 Jahre noch. Siehe Doku. QThread hat das Signal finished(). 'Warte' auf dieses.
Eddie
Beiträge: 14
Registriert: 17. Juli 2007 19:36

Beitrag von Eddie »

In der Doku steht nichts von einem Signal finished(). Kann es daran liegen, dass ich mit Qt 3 arbeite?

Die Doku zu wait(), habe ich so verstanden, dass so lange gewartet wird, bis run() verlassen wurde - die Berechnung also beendet ist.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Bei Qt3 kann ich nicht mitreden.
Eddie
Beiträge: 14
Registriert: 17. Juli 2007 19:36

[gelöst] QThread für lange Berechnung

Beitrag von Eddie »

Habe das Problem gelöst. Schuld waren meine Ausgaben in eine Nachrichtenfenster der GUI. Das hat wohl gehakt.

Ansonsten geht das mit dem wait, nur, dass es die GUI blockiert bis beide Threads fertig sind.
iaby
Beiträge: 53
Registriert: 10. Februar 2007 13:12

Beitrag von iaby »

Bei den Ausgaben in das GUI wirst du wohl CriticalSections bemühen müssen! Zumindest ist das bei Delphi so!
Und damit dein GUI nicht hängt bleibt einem wohl nichts anderes übrig als das wait() wegzulassen und dafür Signals/Slots zu benutzen.
Antworten