Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
PaceMaker.h
1#pragma once
2#include <chrono>
3#include <thread>
4
5class PaceMaker {
6 using sys_clock = std::chrono::system_clock;
7 sys_clock::time_point frame_begin;
8 std::chrono::nanoseconds myNextWait;
9 std::chrono::nanoseconds myTargetFrameLen;
10 bool initDone = false;
11 int fps;
12
13public:
14
15 PaceMaker(int _fps)
16 {
17 setFps(_fps);
18 }
19
20 void setFps(int _fps)
21 {
22 if(_fps <= 0)
23 {
24 myTargetFrameLen = std::chrono::nanoseconds(1);
25 }
26 else
27 {
28 myTargetFrameLen = std::chrono::nanoseconds(1000000000 / _fps);
29 }
30 fps = _fps;
31 }
32
33 void start() {
34 if (!initDone)
35 {
37 frame_begin = sys_clock::now();
38 initDone = true;
39 }
40 }
41
42 void end() {
43
44 std::chrono::nanoseconds frame_len = sys_clock::now() - frame_begin;
45 if (myNextWait > frame_len)
46 {
47 std::this_thread::sleep_for(myNextWait - frame_len);
48 }
50 }
51
52};
Definition PaceMaker.h:5
std::chrono::nanoseconds myNextWait
Definition PaceMaker.h:8
std::chrono::system_clock sys_clock
Definition PaceMaker.h:6
void setFps(int _fps)
Definition PaceMaker.h:20
PaceMaker(int _fps)
Definition PaceMaker.h:15
bool initDone
Definition PaceMaker.h:10
int fps
Definition PaceMaker.h:11
void end()
Definition PaceMaker.h:42
std::chrono::nanoseconds myTargetFrameLen
Definition PaceMaker.h:9
void start()
Definition PaceMaker.h:33
sys_clock::time_point frame_begin
Definition PaceMaker.h:7