作为对这篇文章的跟进,我创建了一个Qt3D项目,这是Qt3D示例的修改版本。 我在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()
完成并返回。关键区别在于执行顺序。 - vahancho