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 :
#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 :
#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.

