61 lines
1.5 KiB
C++
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
|