MCPcopy Create free account
hub / github.com/Prograda/Skybolt / exec

Method exec

src/Skybolt/SkyboltEngine/UpdateLoop/UpdateLoop.cpp:24–50  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22}
23
24void UpdateLoop::exec(Updatable updatable, ShouldExit shouldExit)
25{
26 // We must use double precision because time_since_epoch can exceed float precision
27 typedef std::chrono::duration<double> seconds;
28 double prevElapsedTime = 0;
29
30 while (!shouldExit())
31 {
32 // Get time delta
33 double elapsed;
34 while (true) // this loop enforces max frame rate
35 {
36 elapsed = seconds(std::chrono::high_resolution_clock::now().time_since_epoch()).count();
37 if (float(elapsed - prevElapsedTime) > mMinFrameDuration)
38 break;
39 std::this_thread::sleep_for(std::chrono::milliseconds(1));
40 }
41
42 float dtWallClock(elapsed - prevElapsedTime);
43 prevElapsedTime = elapsed;
44
45 if (!updatable(dtWallClock))
46 {
47 return;
48 }
49 }
50}
51
52} // namespace skybolt

Callers 2

runMainLoopFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected