Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #pragma once
00015
00019 #ifdef WIN32
00020 #include <Windows.h>
00021 #endif
00022
00023 namespace kNet
00024 {
00025
00027 typedef unsigned long long tick_t;
00028
00033 class Clock
00034 {
00035 public:
00036 Clock();
00037
00038
00040 static void Sleep(int milliseconds);
00041
00043 static int Year();
00044
00046 static int Month();
00047
00049 static int Day();
00050
00052 static int Hour();
00053
00055 static int Min();
00056
00058 static int Sec();
00059
00061 static unsigned long SystemTime();
00062
00064 static unsigned long Time();
00065
00067 static unsigned long TickU32();
00068
00070 static tick_t Tick();
00071
00073 static tick_t TicksPerSec();
00074
00075 static inline tick_t TicksPerMillisecond() { return TicksPerSec() / 1000; }
00076
00078 static inline tick_t TicksInBetween(tick_t newTick, tick_t oldTick)
00079 {
00080 return (tick_t)(newTick - oldTick);
00081 }
00082
00084 static inline bool IsNewer(tick_t newTick, tick_t oldTick)
00085 {
00086 return TicksInBetween(newTick, oldTick) < ((tick_t)(-1) >> 1);
00087 }
00088
00089 static inline float MillisecondsSinceF(tick_t oldTick) { return TimespanToMillisecondsF(oldTick, Tick()); }
00090 static inline double MillisecondsSinceD(tick_t oldTick) { return TimespanToMillisecondsD(oldTick, Tick()); }
00091
00092 static inline float SecondsSinceF(tick_t oldTick) { return TimespanToSecondsF(oldTick, Tick()); }
00093 static inline double SecondsSinceD(tick_t oldTick) { return TimespanToSecondsD(oldTick, Tick()); }
00094
00095 static inline float TicksToMillisecondsF(tick_t ticks) { return ticks * 1000.f / TicksPerSec(); }
00096 static inline double TicksToMillisecondsD(tick_t ticks) { return ticks * 1000.0 / TicksPerSec(); }
00097
00098 static inline float TicksToSecondsF(tick_t ticks) { return ticks / (float)TicksPerSec(); }
00099 static inline double TicksToSecondsD(tick_t ticks) { return ticks / (double)TicksPerSec(); }
00100
00101 static inline float TimespanToMillisecondsF(tick_t oldTick, tick_t newTick) { return TicksToMillisecondsF(TicksInBetween(newTick, oldTick)); }
00102 static inline double TimespanToMillisecondsD(tick_t oldTick, tick_t newTick) { return TicksToMillisecondsD(TicksInBetween(newTick, oldTick)); }
00103
00104 static inline float TimespanToSecondsF(tick_t oldTick, tick_t newTick) { return TicksToSecondsF(TicksInBetween(newTick, oldTick)); }
00105 static inline double TimespanToSecondsD(tick_t oldTick, tick_t newTick) { return TicksToSecondsD(TicksInBetween(newTick, oldTick)); }
00106
00107 private:
00108 static tick_t appStartTime;
00109
00111 static void InitClockData();
00112
00113 #ifdef WIN32
00114 static LARGE_INTEGER ddwTimerFrequency;
00115 static LARGE_INTEGER ddwTimer;
00116
00117 #endif
00118 };
00119
00120 }