考虑:
#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);
Run Code Online (Sandbox Code Playgroud)
所用时间: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);
Run Code Online (Sandbox Code Playgroud)
所用时间:0.105秒(变化)
如何调整睡眠()以使程序在每次打印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";
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
582 次 |
最近记录: |