【发布时间】:2018-10-12 16:12:42
【问题描述】:
我正在用 C++ 编写一个简单的游戏模拟程序,有一个名为 update() 的函数可以更新游戏的当前状态,它必须精确地每 1 秒调用一次。如果我使用这样的循环:
while(//some condition) {
update();
Sleep(1000);
}
那么该函数将不会每 1 秒调用一次,而是每 (1 + update () 的执行时间) 调用一次。 我阅读了各种解决方案,例如异步函数、多线程或使用 std::chrono 计算函数的执行时间并将其从 1000ms 参数中减去以休眠。其中一些对于我的简单案例来说太复杂了,如果我不太了解它们,其他一些似乎不安全。
谁能告诉我什么是适合我的要求的解决方案? 提前致谢。
【问题讨论】:
-
"使用 std::chrono 计算函数执行时间并从 1000ms 参数中减去它以休眠" 这是最简单的方法之一,我建议这样做。
-
"使用 std::chrono 计算函数执行时间并从 1000ms 中减去它":听起来您已经有了答案,您到底想从我们这里得到什么? 编辑哦,来吧!
-
我用硬件定时器中断做过一次。硬件将在 1000 毫秒(正负大约 1 个时钟周期)处跳转到代码地址,执行代码(应该很短,并且需要不到 1000 毫秒,然后返回。硬件中断取决于硬件(不,呃),所以我不知道它是否适用于您的特定场景。这只是实现这一点的一种很好且准确的方法。
-
你有一些event loop 吗?您在游戏中使用哪些图形库? SFML 或 Qt 还是什么?
-
@the_storyteller 我知道你在说什么,但我在嵌入式系统中做过类似的事情,不知道如何在桌面应用程序中做到这一点。
标签: c++ multithreading asynchronous delay sleep