2016-06-29 4 views
-1

내 programm에서 신호가 트리거되는 한 잠든 스레드가 필요합니다. 나는 함수 시리얼 :: 위치한 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(); 

내 클래스를 추가 신호에 의해 트리거해야합니다. 다른 시간에 CPU 시간을 낭비하지 않고 스레드가 절전되기를 원합니다.

+0

단순히 _slot_'sendRequest()'를 singal에 연결하면됩니다. 당신의 구체적인 문제는 무엇입니까? –

+0

내 문제는 qthread :: run이 CPU를 구우지 않는 이벤트 루프를 시작한다는 것을 몰랐다는 것입니다. 하지만 지금 나는 그것을 알고 :) –

답변

3

쓰레드가 이미 자고있어 CPU 시간을 낭비하지 않아도됩니다. 그 행동을하기 위해 특별한 것을 할 필요가 없습니다. 기본 구현 인 QThread::run의 동작 방식입니다. 이벤트 루프를 시작합니다. 이벤트 루프는 처리 할 이벤트가 없으면 휴면 상태가되어 더 많은 이벤트를 기다립니다.

관련 문제