2016-06-29 17 views
-1

私のプログラムでシグナルがトリガーされている限り、スリープ状態のスレッドが必要です。 私は、関数シリアル::のsendRequest()私のクラスのをQthreadを作成し、それQthread - イベントまでスリープ

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(); 

に私のクラスを追加した信号によってトリガされなければなりません。 もう1度、CPU時間を無駄にすることなくスレッドをスリープ状態にします。

+0

単純に_slot_ 'sendRequest()'をシングルに接続するだけで動作します。あなたの特定の問題は何ですか? –

+0

私の問題は、qthread :: runがCPUを焼くイベントループを開始することを知らなかったことです。しかし、今私はそれを知っている:) –

答えて

3

スレッドは既にスリープしており、処理が必要ないときにCPU時間を無駄にしません。あなたはその行動を得るために特別なことをする必要はありません。これは、QThread::runのデフォルトの実装がどのように動作するかです。イベントループを開始します。イベントループに処理するイベントがない場合は、スリープしてより多くのイベントを待機します。

関連する問題