以下成员函数在主事件循环中运行。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