我试图在执行交集检查的循环中限制每秒的帧数,使用带有计时器和线程的C++。
下面是我的代码:
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::chrono::system_clock::time_point lastFrame = std::chrono::system_clock::now();
while (true)
{
// Maintain designated frequency of 5 Hz (200 ms per frame)
now = std::chrono::system_clock::now();
std::chrono::duration<double, std::milli> delta = now - lastFrame;
lastFrame = now;
if (delta.count() < 200.0)
{
std::chrono::duration<double, std::milli> delta_ms(200.0 - delta.count());
auto delta_ms_duration = std::chrono::duration_cast<std::chrono::milliseconds>(delta_ms);
std::this_thread::sleep_for(std::chrono::milliseconds(delta_ms_duration.count()));
}
printf("Time: %f \n", delta.count());
// Perform intersection test
}
我遇到的问题是,增量的每个其他输出都显示出很小的量,而不是我目标的~200ms/帧:
Time: 199.253200
Time: 2.067700
Time: 199.420400
Time: 2.408100
Time: 199.494200
Time: 2.306200
Time: 199.586800
Time: 2.253400
Time: 199.864000
Time: 2.156500
Time: 199.293800
Time: 2.075500
Time: 201.787500
Time: 4.426600
Time: 197.304100
Time: 4.530500
Time: 198.457200
Time: 3.482000
Time: 198.365300
Time: 3.415400
Time: 198.467400
Time: 3.595000
Time: 199.730100
Time: 3.373400
对于为什么会发生这种情况,有什么想法吗?
发布于 2016-08-03 05:10:14
交替的增量时间是由一个逻辑问题引起的:您正在根据之前帧的持续时间(根据帧持续时间的计算方式)向一帧添加延迟。这意味着在一个长帧(~200ms)之后,您不会应用延迟,而是得到一个短帧(几毫秒),然后触发下一帧的延迟,给出一个长帧,依此类推。
https://stackoverflow.com/questions/38730273
复制相似问题