2020-02-29 10:33:37 +01:00

61 lines
1.5 KiB
C++

//
// Created by Epagris on 2019. 12. 08..
//
#ifndef EG3D_TIMER_H
#define EG3D_TIMER_H
#include <cstdint>
#include <windows.h>
#include <profileapi.h>
#include <set>
#include <mutex>
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<TimerCallbackData> 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