以下成員函數在主事件循環中運行。Qt:立即啓動線程,不會延遲主事件循環
void MyClass::update()
{
Data x = m_interpolator->getRequest(m_interpolationRequest)
// non blocking new calclulation request
m_interpolator->asyncRequestCalculations(++m_interpolationRequest);
// I want to run doCalculations from now on in a second thread
... updates ... // takes some time
}
<-- earliest time when doCalculations() will be triggered
隨着update
每個呼叫我請求一個新的計算,我將在下一週期中取。
CInterpolator (m_interpolator)
是在不同線程中使用QObject
(使用moveToThread)。 asyncRequestCalculations
調用(非阻塞)CInterpolator::doCalculations
的調用(與發送信號到doCalculations
時隙相同)。
它有效,但速度太慢。會發生什麼情況是doCalculations
的信號是正確調度的,但CInterpolator
只調用之後函數update
已經離開。可以理解的是,這是Qt事件循環的工作原理。
但對我來說,它浪費了... updates ...
塊的時間。我希望計算與... updates ...
平行進行。 我怎麼能做到這一點?
你的意思是,結果是在準備好時'...更新...'仍然忙? – 2015-02-24 14:59:38
不!但是計算已經可以並行開始,不需要完成。更新上面,使其更明顯 – 2015-02-24 15:04:57
如果doCalculations沒有觸發,那麼我的猜測是它*不是在另一個線程中。你有沒有正確地調用moveToThread呢? – 2015-02-24 15:08:59