淄博鲁山Qt:在多线程中创建QTimer
浙东十八潭通过信号启动定时器。
TestClass::TestClass(QWidget *parent)
: QWidget(parent)闹钟铃声怎么设置
{
m_pThread = new QThread(this);
m_pTimer = new QTimer();春分说说
季度考核m_pTimer->moveToThread(m_pThread);
m_pTimer->tInterval(1000);经典童谣
connect(m_pThread, SIGNAL(started()), m_pTimer, SLOT(start()));
connect(m_pTimer, &QTimer::timeout, this, &ThreadTest::timeOutSlot, Qt::DirectConnection);
}
通过moveToThread()⽅法改变定时器所处的线程,不要给定时器设置⽗类,否则该函数将不会⽣效。
怦然心动的英文在信号槽连接时,我们增加了⼀个参数——连接类型,先看看该参数可以有哪些值:
诸葛亮身高Qt::AutoConnection:默认值。如果接收者处于发出信号的线程中,则使⽤Qt::DirectConnection,否则使⽤Qt::QueuedConnection,连接类型由发出的信号决定。
Qt::DirectConnection:信号发出后⽴即调⽤槽函数,槽函数在发出信号的线程中执⾏。
Qt::QueuedConnection:当控制权返还给接收者信号的事件循环中时,开始调⽤槽函数。槽函数在接收者的线程中执⾏。
回到我们的例⼦,⾸先将定时器所处的线程改为新建的线程,然后连接信号槽,槽函数在定时器所处的线程中执⾏。