gpt4 book ai didi

c++ - Qt:立即启动线程,不延迟主事件循环

转载 作者:行者123 更新时间:2023-11-28 06:24:56 25 4
gpt4 key购买 nike

下面的成员函数在主事件循环中运行。

    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 ... block 的时间。我希望计算与 ...updates... 并行进行。 我怎样才能做到这一点?

最佳答案

主事件循环应该是快速操作,应该连续执行。因此,这就是您观察到应用程序太慢的原因:刷新率比应有的慢。

不建议在更新/事件循环中使用慢速操作。

顺便说一下,为了并行执行,你必须使用 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());
}

关于c++ - Qt:立即启动线程,不延迟主事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28698922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com