连续光线投射之间的时间延迟



作为这篇文章的后续,我创建了一个Qt3D项目,它是Qt3D示例的修改版本。我正在使用带有GCC-7的 openSUSE Linux 上的 Qt 5.13.1 运行我的项目。在我的项目中,我可以在连续光线投射之间使用时间延迟。我做了一些意想不到的观察:


main.cpp文件中,当我运行此行时,光线投射在某个时候卡住了,无法继续:

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

但是,当我运行此行时,即使将延时设置为0 msec,所有连续的光线投射也没有任何问题,:

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()函数调用返回。

最新更新