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