ultimatepp/bazaar/Timer/Timer.h
klugier 8560f9295f Bazaar: Timer remove using namespace Upp directive.
git-svn-id: svn://ultimatepp.org/upp/trunk@15200 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2020-10-04 20:08:01 +00:00

66 lines
1.5 KiB
C++

#ifndef _Timer_Timer_h_
#define _Timer_Timer_h_
#include <Core/Core.h>
namespace Upp {
//runs a chained list of TimerEvent stored Callbacks after sleeping
class Timer
{
public:
typedef Timer CLASSNAME;
Timer();
virtual ~Timer();
//API just as in Ctrl
public:
void SetTimeCallback(int delay_ms, Callback cb, intptr_t id = 0);
void KillTimeCallback(intptr_t id = 0);
void KillSetTimeCallback(int delay_ms, Callback cb, intptr_t id);
bool ExistsTimeCallback(intptr_t id = 0);
void PostCallback(Callback cb, intptr_t id = 0);
void KillPostCallback(Callback cb, intptr_t id);
void SetTimerGranularity(int ms);
private:
struct TimeEvent : public Link<TimeEvent> {
dword time;
int delay;
Callback cb;
void *id;
bool rep;
unsigned GetHashValue() const { return GetPtrHashValue(id); }
};
void sTimeCallback(dword time, int delay, Callback cb, void *id);
void SetTimeCallback(int delay_ms, Callback cb, void *id);
void KillTimeCallbacks(void *id, void *idlim);
bool ExistsTimeCallback(void *id);
void KillTimeCallback(void *id);
void TimerProc(dword time, int & leftsleep);
void KillTimeCallbacks(void *id);
void TimerThread();
//DATA
private:
Thread t;
bool run;
int granularity;
Mutex sTimerLock;
dword sTClick;
LinkOwner<TimeEvent> elist; //elements
//ArrayMap<unsigned, TimeEvent*> emap;
//LinkOwner<TimeEvent> flist; //unused elements for reuse
};
}
#endif