Код: Выделить всё
void _Test_duration_print(float duration)
{
using chrono_clock = std::chrono::steady_clock;
//using chrono_clock = std::chrono::high_resolution_clock;
float timer = 0.0f;
auto startTime = chrono_clock::now();
auto now = chrono_clock::now();
auto lastUpdate = chrono_clock::now();
auto dt_rcp = 1.0 / 1000000.0;
uint32_t frame_count = 0;
while (true)
{
now = chrono_clock::now();
auto delta_duration = now - lastUpdate;
auto deltaTime = std::chrono::duration_cast(delta_duration).count();
auto deltaTime_sec = deltaTime * dt_rcp;
auto deltaTime_sec_2 = delta_duration.count();
auto sinceStartDuration = now - startTime;
auto timeSinceStart = std::chrono::duration_cast(sinceStartDuration).count();
auto timeSinceStart_sec = timeSinceStart * dt_rcp;
timer += deltaTime_sec;
printf("Timer:[%f]|TimeSinceStart:[%lld]|TimeSinceStart(Second):[%f]DeltaTime=[%lld]|d_deltaTime:[%f]|d_deltaTime_2:[%lld]|\n",
timer, timeSinceStart, timeSinceStart_sec, deltaTime, deltaTime_sec, deltaTime_sec_2);
lastUpdate = now;
frame_count++;
if (timer < duration)continue;
printf(">>>>End with timer:[%f]", timer);
break;
}
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79672829/wrong-duration-result-with-chrono-duration-delta-time[/url]