QThread에서 파생 된 개체가 있고 클래스 정의에 Q_OBJECT 매크로가 포함되어 있습니다. 스레드가 실행되는 동안 몇 가지 가끔 검사를 할 수 있도록 스레드 내에 타이머를 만들었습니다. 그러나 timeout 이벤트는 절대로 발생하지 않습니다.스레드의 QTimer - 이벤트가 처리되지 않습니까?
타이머를 하나만 만들려고했지만 이벤트가 방출되지 않았습니다.
이벤트는 기본적으로 스레드에서 처리됩니까? 아니면 처리되도록하려면 다른 작업을 수행해야합니까? 여기
내가 스레드 및 타이머 설정 방법에 대한 코드입니다 : 내가 의 QApplication :: processEvents를 추가하는 경우void MyClass::run(void)
{
checkTimer_chA = new QTimer(this);
qDebug() << connect(checkTimer_chA, SIGNAL(timeout()), this, SLOT(timerExpiry_chA()));
checkTimer_chA->start(1000);
// prevent multiple, simultaneous starts
if(!isRunning)
{
qDebug() << "Thread: MyClass::run";
isRunning = true;
while(isRunning)
{
getData();
processData();
yieldCurrentThread();
}
}
checkTimer_chA->stop();
delete checkTimer_chA;
}
void DAQ::timerExpiry_chA(void)
{
qDebug() << "timerExpiry_chA";
checkTimer_chA->stop();
}
를(); 에 대한 호출 바로 전에 yieldCurrentThread(); 타이머가 예상대로 작동합니다. 그러나 이것은 나에게 잘못된 것처럼 보인다.
스레드 코셔에서 QApplication :: processEvents()를 호출합니까? exec()가 배후에서 무엇을 할 것인가. – dwj