Intro :
Parfois nous avons besoin, dans le code, d’appeler des fonctions / méthodes à un certain intervalle de temps !
Prérequis :
– Savoir lire du C++
Explications :
Voici le fichier DelayedTimerManager.h :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#ifndef DELAYED_TIMER_MANAGER_H #define DELAYED_TIMER_MANAGER_H #include "Singleton.h" #include <map> class DelayedTimerManager : public Singleton<DelayedTimerManager> { public: struct TimerData { TimerData() : iElapsedTime(0), iLastTime(0), iWaitingTime(0) { } uint64 iElapsedTime; uint64 iLastTime; uint32 iWaitingTime; }; DelayedTimerManager(); virtual ~DelayedTimerManager(); bool TimerWait(const std::string& sTimerName); void RegisterTimer(const std::string& sTimerName, uint32 iWaitingTime); void UpdateTimer(const std::string& sTimerName, uint32 iWaitingTime); void ResetTimer(const std::string& sTimerName); private: std::map<std::string, TimerData> m_timers; }; #endif |
Voici le contenu du fichier DelayedTimerManager.cpp :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#include "DelayedTimerManager.h" #include <string> #include <Windows.h> template<> DelayedTimerManager* Singleton<DelayedTimerManager>::ms_instance = nullptr; DelayedTimerManager::DelayedTimerManager() { } DelayedTimerManager::~DelayedTimerManager() { } bool DelayedTimerManager::TimerWait(const std::string& sTimerName) { TimerData* pTimerData = &m_timers[sTimerName]; uint32 iElapsedTime = GetTickCount() - pTimerData->iLastTime; uint32 iWaitingTime = pTimerData->iWaitingTime; if (iElapsedTime > iWaitingTime) { pTimerData->iLastTime = GetTickCount(); return true; } return false; } void DelayedTimerManager::RegisterTimer(const std::string& sTimerName, uint32 iWaitingTime) { TimerData timerData; timerData.iWaitingTime = iWaitingTime; m_timers[sTimerName] = timerData; } void DelayedTimerManager::ResetTimer(const std::string& sTimerName) { TimerData* pTimerData = &m_timers[sTimerName]; pTimerData->iLastTime = 0; } void DelayedTimerManager::UpdateTimer(const std::string& sTimerName, uint32 iWaitingTime) { TimerData* pTimerData = &m_timers[sTimerName]; pTimerData->iWaitingTime = iWaitingTime; } |
Résumé :
Nous avons présenter le code pour gérer un système de temporisation.


