// // Created by Epagris on 2019. 12. 08.. // #ifndef EG3D_TIMER_H #define EG3D_TIMER_H #include #include #include #include #include namespace eg3d { class Timer; typedef void(*TickCallBackFn)(Timer * pTimer, const double * pTrigTimeElapsed, void * ptr); struct TimerCallbackData { TickCallBackFn callBackFn; void * ptr; bool operator<(const TimerCallbackData& other) const; }; class Timer { private: double mSecondsPerCount; // óraütések másodpercenként int64_t mLastTimestamp; // utolsó rögzített időpont countban int64_t mLastTriggerTimestamp; // utolsó triggeridőpont countban double mTimeElapsed; // két tick között eltelt időt mutatja másodpercben double mTriggerTime; // idő melynél jelez az óra másodpercben std::set mRegCallbacks; std::mutex mRegCBMtx; public: static constexpr double sDEF_triggerTime = 1; // 1 másodperces triggeridő Timer(); // konstr. void tick(); // léptetés bool reg(const TimerCallbackData& tmrCBData); // ráfűzés a tick listára bool unreg(const TimerCallbackData& tmrCBData); // lefűzés a tick listáról void setTriggerTime(const double& triggerTime); // triggeridő beállítása double getTriggerTime() const; // triggeridő lekérése double getElapsedTime() const; // lekéri az utolsó két tick közöt eltelt időt }; // GLOBLÁIS időzítők extern Timer gTmr1s; } #endif //EG3D_TIMER_H