我有一个派生自QThread的对象,类定义包含Q_OBJECT宏.我在线程中创建了一个计时器,所以我可以在线程运行时偶尔进行一些检查; 但是,超时事件永远不会发生.
我也试过让计时器成为单一的,但没有发出任何事件.
默认情况下是在线程中处理事件还是我需要做其他事情才能处理它们?
这是我如何设置线程和计时器的代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
如果我添加QApplication :: processEvents(); 就在调用yieldCurrentThread()之前; 计时器按预期工作.但是,这对我来说似乎不对.