c++ - 在 C++ 中每 10 毫秒执行一次函数

标签 c++ winapi time sleep

考虑:

#include <time.h>
#include <windows.h>

clock_t tStart = clock();
for (int i = 0; i < 10; i++) {
    Sleep(10);
}
printf("Time taken: %.3fs\n", (double)(clock() - tStart) / CLOCKS_PER_SEC);

耗时:0.102 秒(可变)

clock_t tStart = clock();
for (int i = 0; i < 10; i++) {
    doSomething();
    Sleep(10);
}
printf("Time taken: %.3fs\n", (double)(clock() - tStart) / CLOCKS_PER_SEC);

耗时:0.105 秒(可变)

如何调整我的 Sleep() 以便程序始终在每次打印 0.100 秒时结束? (并且 doSomething(); 每 0.010 秒执行一次)。这可能吗?

到目前为止,我已经尝试计算循环的每次迭代所花费的时间,并将随后的 Sleep() 减少该数量,但无济于事。此外,如果让某事每 0.010 秒执行一次是不可能的,那么我可以持续让某事执行的最短时间是多少?

最佳答案

我(我假设还有很多其他人)在游戏中使用的技术是处理绝对时间。这会根据操作的持续时间自动调整。

例如

#include <chrono>
#include <thread>
#include <iostream>

using namespace std::literals;
using clock_type = std::chrono::high_resolution_clock;

void doSomething() {}

int main()
{
    auto when_started = clock_type::now(); 
    auto target_time = when_started + 10ms;
    for (int i = 0; i < 10; i++) {
        doSomething();
        std::this_thread::sleep_until(target_time);
        target_time += 10ms;
    }
    auto now = clock_type::now();
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(now - when_started).count() << "ms\n";
}

关于c++ - 在 C++ 中每 10 毫秒执行一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46609863/

相关文章:

c++ - 打开终端 : unknown Qt Creator on MacOs 10. 12.4 时出错

c++ - 列出 Win32 设备命名空间的内容

r - R:如何处理没有日期的时间?

objective-c - 如何准确测量时间差xcode

java - java中获取ResultTable[]的第一个元素

c++ - 大量倒计时

c++ - 更改相对于外部标志 (cpp) 的循环条件

delphi - Unicode/WideString 气球托盘

c# - 在不使用互操作/非托管代码的情况下监视打印假脱机

c++ - map 内部的C++多个 map