以下成员函数在主事件循环中运行。
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 ...
并行进行。 我怎么能做到这一点?
答案 0 :(得分:1)
主要事件循环应该是快速操作,应该连续执行。因此,这就是为什么你观察到应用程序太慢的原因:刷新率比它应该慢。
建议不要在更新/事件循环中使用慢速操作。
顺便说一下,为了进行并行执行,你必须使用threads。 一个代码代码段应为:
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
std::thread first(update());
}