Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 标准::计时-固定时间步循环_C++_Chrono_Game Loop - Fatal编程技术网

C++ 标准::计时-固定时间步循环

C++ 标准::计时-固定时间步循环,c++,chrono,game-loop,C++,Chrono,Game Loop,我正在尝试使用进行固定时间步长循环 这是我的代码: #include <iostream> #include <chrono> int main() { std::chrono::steady_clock::time_point start; const double timePerFrame = 1.0 / 60.0; double accumulator = 0.0; int i = 0; while(true) {

我正在尝试使用进行固定时间步长循环

这是我的代码:

#include <iostream>
#include <chrono>

int main()
{
    std::chrono::steady_clock::time_point start;
    const double timePerFrame = 1.0 / 60.0;
    double accumulator = 0.0;
    int i = 0;
    while(true)
    {
        start = std::chrono::steady_clock::now();
        while(accumulator >= timePerFrame)
        {
            accumulator -= timePerFrame;
            std::cout << ++i << std::endl;
            //update();
        }
        accumulator += std::chrono::duration_cast<std::chrono::duration<double>>(std::chrono::steady_clock::now() - start).count();
        //render();
    }
    return 0;
}
#包括
#包括
int main()
{
标准::时钟::稳定时钟::时间点开始;
const double timePerFrame=1.0/60.0;
双累加器=0.0;
int i=0;
while(true)
{
开始=标准::计时::稳定的时钟::现在();
while(累加器>=时间性能帧)
{
累加器-=时间性能帧;
std::cout
#包括
#包括
#包括
int main()
{
使用名称空间std::chrono;
使用帧率=持续时间;
自动下一步=稳定的时钟::现在()+帧速率{1};
int i=0;
while(true)
{

std::cout
1.0/60.0
不是一个完全可表示的数字控制台窗口并不是真正为高性能滚动而设计的…我有固定时间步长循环的代码,它是使用其他时钟制作的,工作没有问题,但是这个时钟每秒打印大约17条消息。我读过“睡眠”函数不应该在固定时间步长循环中使用。@Akasatakasata:sleep确实可以任意晚起。如果您喜欢忙循环,我会将其添加到答案中。那太好了,因为我真的不知道我所做的循环有什么问题。@HowardHinnant忙循环与在汇编或C p中对循环使用NOP相同程序设计?
#include <iostream>
#include <chrono>
#include <thread>

int main()
{
    using namespace std::chrono;
    using Framerate = duration<steady_clock::rep, std::ratio<1, 60>>;
    auto next = steady_clock::now() + Framerate{1};
    int i = 0;
    while(true)
    {
        std::cout << ++i << std::endl;
        //update();
        std::this_thread::sleep_until(next);
        next += Framerate{1};
        //render();
    }
    return 0;
}
int main()
{
    using namespace std::chrono;
    using Framerate = duration<steady_clock::rep, std::ratio<1, 60>>;
    auto next = steady_clock::now() + Framerate{1};
    int i = 0;
    while(true)
    {
        std::cout << ++i << std::endl;
        //update();
        while (steady_clock::now() < next)
            ;
        next += Framerate{1};
        //render();
    }
    return 0;
}