连续光线投射之间的时间延迟
Time delay between consecutive ray castings
作为 this post, I have created a Qt3D project which is a modified version of a Qt3D example 的跟进。我正在 运行 在 openSUSE Linux 和 GCC-7
上使用 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()
函数调用 returns.
作为 this post, I have created a Qt3D project which is a modified version of a Qt3D example 的跟进。我正在 运行 在 openSUSE Linux 和 GCC-7
上使用 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()
函数调用 returns.