QProgressDialog und QtConcurrent::run

Alles rund um die Programmierung mit Qt
Antworten
DimitriJunker
Beiträge: 47
Registriert: 8. September 2014 12:12

QProgressDialog und QtConcurrent::run

Beitrag von DimitriJunker »

Hallo,

Sagen wir ich will 100 Bilder erzeugen in 4 Threads und den Fortschritt per QProgressdialog darstellen, wie muß ich das machen. Gefunden habe ich nur Beispiele mit QTConcurrent::map, aber das wäre ja wohl eher etwas wenn ich 100 Bilder in 100 Threads starten will, Außerdem wird bei dem Bsp soweit ich es verstanden habe als Fortschritt der Abschluß jeweils eines Threads angezeigt. Ich will aber aus den Threads heraus das Label und den Value verändern.

Gruß
Dimitri
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QProgressDialog und QtConcurrent::run

Beitrag von Christian81 »

Wenn ein Bild fertig ist, aus dem Thread heraus ein Signal senden und dieses auswerten um den ProgressDialog zu aktualisieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
DimitriJunker
Beiträge: 47
Registriert: 8. September 2014 12:12

Re: QProgressDialog und QtConcurrent::run

Beitrag von DimitriJunker »

Ja soweit war ich auch schon, aber wie ich das machen soll ist mir noch nicht klar.
In den Threads erzeuge ich mit emit ein Signal. Im Hauptthread habe ich einen Slot, aber dann braucht man ja noch die Verbindung. Dazu dient ja connect, aber erstens wo kommt das connect hin und zweitens :
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) [static]

was trage ich als Sender ein? mit QTConcurrent::run rufe ich doch eine externe Funktion auf, die ist also kein QObject. Genauer: der Aufruf sieht so aus:

Code: Alles auswählen

void MainW::makePmap()
{
         ...
         for(int threadNr=0;threadNr<data->m_maxThreads;threadNr++)
             QtConcurrent::run(loadPMapInThread,data);
         ...
}
Und die Funktion:

Code: Alles auswählen

void loadPMapInThread( SDLM_DATA * data )
{
...
}
Danke im vorraus
Dimitri
DimitriJunker
Beiträge: 47
Registriert: 8. September 2014 12:12

Re: QProgressDialog und QtConcurrent::run

Beitrag von DimitriJunker »

Hallo,

nach langer Suche und einer parallelen Frage im englischen Forum habe ich von QtConcurent::run auf QtConcurent::map umgestellt, dazu gibt es Beispiele wie man es mit QProgressDialog verknüpft. Was mich zuerst davon abhielt war, daß ich davon ausging, daß genau so viel Threads parralel laufen wie es Elemente zu bearbeiten gibt. Dies ist aber nicht der Fall, normalerweise läuft je ein thread pro Kern, dies kann aber auch mit
QThreadPool::globalInstance()->setThreadCount()

auf einen anderen Wert geändert werden.
Antworten