1 // ----------------------------------------------------------------------------
3 // ----------------------------------------------------------------------------
5 #include "TickCountObject.h"
7 // --- VERSION 1.0 CLASS
9 // --- MultiUse = -1 'True // True
10 // --- Persistable = 0 'NotPersistable // NotPersistable
11 // --- DataBindingBehavior = 0 'vbNone // vbNone
12 // --- DataSourceBehavior = 0 'vbNone // vbNone
13 // --- MTSTransactionMode = 0 'NotAnMTSObject // NotAnMTSObject
16 // static char *VB_Name = "TickCountObject";
17 // static boolean VB_GlobalNameSpace = False;
18 // static boolean VB_Creatable = True;
19 // static boolean VB_PredeclaredId = False;
20 // static boolean VB_Exposed = False;
21 // --- Option Explicit
23 #define LongMin (-(double)2147483648UL) // the "#" sign is a bug of the VB environment AutoFormat function but causes no real problems; don't worry 'bout it!
24 #define LongMax (2147483647UL)
28 long MyGetTickCount();
29 long QueryPerformanceCounter(currency lpPerformanceCount);
30 long QueryPerformanceFrequency(currency lpFrequency);
34 boolean DelayLoopActive;
36 boolean MPause, bHighPerf;
37 currency PFreq; // LARGE_INTEGER
38 double sFactor, msFactor, usFactor;
42 boolean TickCountObject_Get_Active()
46 Active = DelayLoopActive;
51 boolean TickCountObject_Get_Pause()
60 void TickCountObject_Let_Pause(boolean NewVal)
65 currency TickCountObject_Get_TickNow()
71 QueryPerformanceCounter(TickNow);
75 TickNow = MyGetTickCount();
81 long TickCountObject_TickDiffS(currency TickStart)
89 QueryPerformanceCounter(NewTick);
90 TD = (NewTick - TickStart);
91 TickDiffS = sFactor * TD;
95 NewTick = MyGetTickCount();
96 if (NewTick < TickStart)
98 // Overflow occured and needs to be handled
99 TickDiffS = (LongMax - TickStart) + (NewTick - LongMin) + 1;
103 TickDiffS = NewTick - TickStart;
106 TickDiffS = (int)(TickDiffS / 1000);
112 long TickCountObject_TickDiffMS(currency TickStart)
116 currency NewTick, TD;
120 QueryPerformanceCounter(NewTick);
121 TD = (NewTick - TickStart);
122 TickDiffMS = msFactor * TD;
126 NewTick = MyGetTickCount();
127 if (NewTick < TickStart)
129 // Overflow occured and needs to be handled
130 TickDiffMS = (LongMax - TickStart) + (NewTick - LongMin) + 1;
134 TickDiffMS = NewTick - TickStart;
141 currency TickCountObject_TickDiffUS(currency TickStart)
145 currency NewTick, TD;
149 QueryPerformanceCounter(NewTick);
150 TD = (NewTick - TickStart);
151 TickDiffUS = usFactor * TD;
155 NewTick = MyGetTickCount();
156 if (NewTick < TickStart)
158 // Overflow occured and needs to be handled
159 TickDiffUS = ((LongMax - TickStart) + (NewTick - LongMin) + 1) * (currency)1000;
163 TickDiffUS = (NewTick - TickStart) * (currency)1000;
174 static void Class_Initialize()
178 bHighPerf = (0 != QueryPerformanceFrequency(PFreq));
181 sFactor = (double)1 / PFreq;
182 msFactor = (double)1000 / PFreq;
183 usFactor = (double)1000000 / PFreq;
186 DelayLoopActive = False;
187 TickCountObject_Let_Pause(False);