Ich will eine berechnung auf mehrere Threads verteilen, aber irgendwie bleibt mein Programm nach der ersten Iteration in der Eventloop hängen.
Gedacht ist es so:
Ich habe eine QCoreApplication (keine GUI, daher gibt es mit QApplication Runtimefehler) die mehrere QThreads startet. Anschließend soll sie warten, bis die Threads fertig sind. Die Threads brauchen eigentlich für Ihre Funktion kein Eventloop, sie rechnen und enden dann. Wenn alle fertig sind soll sich die QCoreApplication beenden. Soweit der Plan, die Realität sieht anders aus.
Ich habe im Header der QCoreApplication-Klasse einen Slot definiert:
Code: Alles auswählen
class bewert_verteiler: public QCoreApplication{
Q_OBJECT
protected slots:
void quit_check(){
int warten=0;
for(int lauf =0;lauf<thread_anz;lauf++){
if(thread_handels[lauf]->isFinished()==false){ //hier bleibt er ohne Eventloop der Threads hängen
warten=1;
}
}
if (warten==0){
for (int lauf =0;lauf<thread_anz;lauf++){
thread_handels[lauf]->quit();
}
this->exit();
}
}
public:
...
};
Code: Alles auswählen
connect(thread_handels[lauf],SIGNAL(finished()),this,SLOT(quit_check()),Qt::DirectConnection);
Wenn die Threads kein exec() in ihrer run() besitzen kriege ich nach der Berechnung eine "QMutex:
Ich habe das ganze auch mit Eventloops für die Threads ausprobiert:
Code: Alles auswählen
void sub_bewert_st::run(){
//connect( this, SIGNAL(finished()),this, SLOT(deleteLater()), Qt::QueuedConnection);
bewert_start();
//connect(this,SIGNAL(started()),this,SLOT(quit()),Qt::DirectConnection);
//this->setTerminationEnabled(true);
//connect(this,SIGNAL(started()),this,SLOT(deleteLater()),Qt::QueuedConnection);
//exec();
}
Was mache ich falsch?