2016-06-29 14 views
-1

Ich möchte einen Thread, der so lange schläft, wie ein Signal in meinem Programm ausgelöst wird. Ich habe eine QThread und hinzugefügt meine Klasse esQthread - Schlaf bis Ereignis

QThread* serialthread = new QThread; 
Serial* serial = new Serial(); 
serial->moveToThread(serialthread); 
connect(serial, SIGNAL(error(QString)), this, SLOT(errorString(QString))); 
connect(serialthread, SIGNAL(started()), serial, SLOT(process)); 
connect(serial, SIGNAL(finished()), serialthread, SLOT(quit())); 
connect(serial, SIGNAL(finished()), serial, SLOT(deleteLater())); 
connect(serialthread, SIGNAL(finished()), serialthread, SLOT(deleteLater())); 
serialthread->start(); 

Die Funktion Serien :: sendrequest() meine Klasse soll durch ein Signal ausgelöst werden. Das andere Mal möchte ich den Thread so schlafen lassen, ohne CPU-Zeit zu verschwenden.

+0

Einfaches Verbinden des _slot_ 'sendRequest()' mit einem Signal sollte funktionieren. Was sind deine spezifischen Probleme? –

+0

mein Problem ist, dass nicht wusste, dass qthread :: run startet eine Ereignisschleife, die doenst CPU brennen. aber jetzt weiß ich es :) –

Antwort

3

Der Thread schläft bereits und verschwendet keine CPU-Zeit, wenn es keine Arbeit zu tun gibt. Sie müssen nichts Besonderes tun, um dieses Verhalten zu erhalten. So verhält sich die Standardimplementierung von QThread::run: Sie startet eine Ereignisschleife. Wenn die Ereignisschleife keine Ereignisse verarbeiten muss, wird sie inaktiviert und wartet auf weitere Ereignisse.