考虑:
#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秒(变化)
如何调整睡眠()以使程序每次打印0.100秒时始终如一? (那个doSomething();恰好每0.010秒执行一次)。这甚至可能吗?
到目前为止,我已经尝试计算循环的每次迭代所花费的时间,并将该数量减少以下Sleep(),但无济于事。另外,如果每隔0.010秒执行某项操作是不可能的,那么我可以始终如一地执行某些操作的最短时间是多少?
答案 0 :(得分:7)
我(以及我假设许多其他人)在游戏中使用的技术是绝对时间。这会自动调整操作的持续时间。
e.g。
#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";
}