gpt4 book ai didi

c++ - 连续光线转换之间的时间延迟

转载 作者:行者123 更新时间:2023-12-02 20:46:38 24 4
gpt4 key购买 nike

作为 this post 的后续行动,我创建了一个Qt3D project这是 Qt3D example 的修改版本。我正在 openSUSE Linux 上使用 GCC-7 运行 Qt 5.13.1 项目。在我的项目中,我可以在连续光线转换之间使用时间延迟。我做出了一些意想不到的观察:

<小时/>

main.cpp 文件上,当我运行此行时,光线转换在某个时刻卡住并且无法继续:

ConsecutiveRayCaster *consecutiveRayCaster = new ConsecutiveRayCaster(scene, TimeDelayStatus::NoDelay);

但是,当我运行此行时,即使时间延迟设置为 0 毫秒,所有连续的光线转换都可以顺利完成,:

ConsecutiveRayCaster *consecutiveRayCaster = new ConsecutiveRayCaster(scene, TimeDelayStatus::SomeDelay, 0 /* milliseconds */);
<小时/>

这个开关会带来不同:

switch (m_timeDelayStatus) {
case NoDelay:
rayCaster->trigger(origin, direction, length);
break;
case SomeDelay:
QTimer::singleShot(m_timeDelayBetweenRayCasts, [rayCaster, origin, direction, length](){ rayCaster->trigger(origin, direction, length); });
break;
}

我想知道为什么?

最佳答案

不同行为的原因在于 trigger() 函数的调用方式。在第一种情况(无延迟)中,执行会等到 trigger() 函数退出。然而,在第二种情况下,函数调用被安排执行,QTimer::singleShot() 函数几乎立即退出,而不等待 trigger() 函数调用返回。

关于c++ - 连续光线转换之间的时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58061106/

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