多線程中的movetoThread思考(qt)

1.正確用法
無需子類化線程類,通過信號啓動定時器。

TestClass::TestClass(QWidget *parent)
QWidget(parent)
{
m_pThread = new QThread(this);
m_pTimer = new QTimer();
m_pTimer->moveToThread(m_pThread);
m_pTimer->setInterval(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:當控制權返還給接收者信號的事件循環中時,開始調用槽函數。槽函數在接收者的線程中執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章