Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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++ 仅在线程休眠时计算为True_C++_While Loop_Boolean_Double_Game Loop - Fatal编程技术网

C++ 仅在线程休眠时计算为True

C++ 仅在线程休眠时计算为True,c++,while-loop,boolean,double,game-loop,C++,While Loop,Boolean,Double,Game Loop,我有一些意想不到的行为,我不明白。我正在尝试实现一个固定的可变时间步长,如和中所述。当我在VisualStudio中运行程序时,我的内部while循环从来不会计算为true;但是,当我取消注释“this_thread::sleep_for(1s)”时,while循环将在外部循环执行10次左右后计算为true。我希望在更快的机器上,这将是预期的结果 所以我的问题是,为什么只有当“this_thread::sleep_for(1s)”未注释时,内部循环才会计算为true?延迟时间不应该变得比固定的延

我有一些意想不到的行为,我不明白。我正在尝试实现一个固定的可变时间步长,如和中所述。当我在VisualStudio中运行程序时,我的内部while循环从来不会计算为true;但是,当我取消注释“this_thread::sleep_for(1s)”时,while循环将在外部循环执行10次左右后计算为true。我希望在更快的机器上,这将是预期的结果

所以我的问题是,为什么只有当“this_thread::sleep_for(1s)”未注释时,内部循环才会计算为true?延迟时间不应该变得比固定的延迟时间更大吗?数学是不是花了太多时间在电脑上

int updateCount = 0;

double CLOCKS_PER_MILLISECOND((double)CLOCKS_PER_SEC * 1000.0);
double previousTime = std::clock() / CLOCKS_PER_MILLISECOND;
double newTime = 0, deltaTime = 0, lagTime = 0;
double fixedDeltaTime = 1.0 / 60.0;

while (gameIsRunning)
{
    newTime = std::clock() / CLOCKS_PER_MILLISECOND;
    deltaTime = newTime - previousTime;
    previousTime = newTime;
    lagTime += deltaTime;

    inputSystem.update();
    sceneManager.update();

    while(lagTime >= fixedDeltaTime) // never evalutes as true?
    {
        physicsSystem.update();

        lagTime -= fixedDeltaTime;

        updateCount++;
    }

    std::cerr << "-----" << updateCount << "-----" << std::endl;

    physicsSystem.interpolate(lagTime / fixedDeltaTime);

    renderSystem.update();
    audioSystem.update();

    updateCount = 0;
    //std::this_thread::sleep_for(1s);
}
int updateCount=0;
双时钟每毫秒((双)时钟每毫秒*1000.0);
double previousTime=std::clock()/CLOCKS\u PER\u毫秒;
双newTime=0,deltaTime=0,lagTime=0;
双固定时间=1.0/60.0;
同时(游戏运行)
{
newTime=std::clock()/每毫秒时钟数;
deltaTime=新时间-以前的时间;
前一时间=新时间;
延迟时间+=延迟时间;
inputSystem.update();
sceneManager.update();
while(lagTime>=fixeddeltime)//从不将其评估为true?
{
physicsSystem.update();
滞后时间-=固定的滞后时间;
updateCount++;
}

std::cerr您正试图使用
clock()
测量时间,但这是一个进程计时计数器,当进程中的所有线程都处于睡眠状态时,它不会前进。
睡眠的全部意义在于告诉CPU“暂时不要关注这个进程!”.就你的程序而言,时间在睡觉时会冻结

如果您等待的时间足够长,
lagTime
最终将超过
fixeddeltime
,因为您的程序不睡眠的时间段会消耗滴答声……但您必须等待很多秒


不要使用
clock()
来测量时间的绝对流逝。

您正试图使用
clock()
来测量时间,但这是一个进程计时计数器,当进程中的所有线程都处于睡眠状态时,它不会前进。
睡眠的关键是告诉CPU“暂时不要关注这个进程!”.就你的程序而言,时间在睡觉时会冻结

如果您等待的时间足够长,
lagTime
最终将超过
fixeddeltime
,因为您的程序不睡眠的时间段会消耗滴答声……但您必须等待很多秒


不要使用
clock()
来测量时间的绝对流逝。

谢谢。我没有意识到这一点。我将clock()切换为使用SDL函数SDL_GetTicks()这就解决了这个问题。有没有一个C++的绝对时间的方法?谢谢!!这就解决了这个问题。有没有C++标准的方法来获得绝对时间?谢谢!!