File: INCLUDE\UTILS\U_TIMER.H
1 //#############################################################################
2 // //
3 // U_TIMER.H //
4 // Subsystem: Utilities - Timer //
5 // Benutzung durch andere Subsysteme erforderlich: JA //
6 // Implementation: U_TIMER.CPP //
7 //---------------------------------------------------------------------------//
8 // Autoren: Thomas Kullmann, Günther Reinecker //
9 // Stand: 01.12.2002 //
10 // //
11 //#############################################################################
12
13 #ifndef __U_TIMER_H
14 #define __U_TIMER_H
15
16 #include "utils\u_values.h"
17 #include "utils\u_lists.h"
18 #include <mmreg.h> // <msacm.h>
19 #include <msacm.h> // MMRESULT
20 //ph
21
22 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
23
24 //##############################################################################
25 // TBasicTimer
26 //##############################################################################
27
28 class _CURVECLASS TBasicTimer
29 { // abstrakte Basisklasse für Timer, das systemabhängige Verhalten wird in TTimer16 und TTimerMM erweitert
30 //-----------------------------------------------------------------------------
31 // Konstruktor-Destruktor
32 private:
33 TBasicTimer ( TBasicTimer& ) {} // kein Copy-Konstruktor: leer implementiert
34
35 public:
36 // initialisiert den Timer und setzt <aDelay> als Intervall [in Millisek.] in der das Event aufgerufen werden soll
37 // der Timer wird noch NICHT gestartet
38 TBasicTimer ( const UINT= 1000 );
39
40 //-----------------------------------------------------------------------------
41 // get/ set
42 public:
43 // ==> Intervall [in Millisek.] in der das Event aufgerufen wird
44 UINT GetDelay ( void );
45
46 // setzt <aDelay> als Intervall [in Millisek.] in der das Event aufgerufen werden soll
47 // wird erst beim nächsten StartTimer-Aufruf übernommen (oder wenn das Event das nächste Mal aufgerufen wird)
48 // ==> <m_Delay> ODER 0
49 UINT SetDelay ( const UINT= 1000 );
50
51 // ==> TRUE <--> Timer erfolgreich gestartet
52 virtual BOOL IsStarted ( void )= 0;
53
54 //-----------------------------------------------------------------------------
55 // start/ stop
56 public:
57 // started den Timer
58 // ==> TRUE <--> Timer erfolgreich gestartet
59 BOOL StartTimer ( void );
60
61 // started den Timer und setzt <aDelay> als Intervall [in Millisek.] in der das Event aufgrufen wird
62 // ==> TRUE <--> Timer erfolgreich gestartet
63 BOOL StartTimer ( const UINT ); // kein Defaultparameter da sonst in Konflikt zu StartTimer(), wo <m_Delay> verwendet wird
64
65 // stoppt den Timer
66 void StopTimer ( void );
67
68 //-----------------------------------------------------------------------------
69 // start/ stop ( + Ereignis sofort auslösen)
70 public:
71 // siehe StartTimer ( void )
72 BOOL StartTimerIm ( void );
73
74 // siehe StartTimer ( const UINT )
75 BOOL StartTimerIm ( const UINT ); // kein Defaultparameter da sonst in Konflikt zu StartTimer(), wo <m_Delay> verwendet wird
76
77 // siehe StopTimer ( void )
78 void StopTimerIm ( void );
79
80 // von Hand auslösen
81 void Immediately ( void );
82
83 //-----------------------------------------------------------------------------
84 // event
85 protected:
86 // Event zum Überschreiben
87 virtual void OnTimer ( TBasicTimer *const )= 0;
88
89 //-----------------------------------------------------------------------------
90 // private
91 protected:
92 UINT m_Delay; // Intervall [in Millisek.] in der das Event aufgerufen wird ODER 0
93 TIMECAPS m_Tc; // Intervallgrenzen für gültige Werte von <m_Delay>
94 BOOL m_WantTimer; // haben Anwender ODER TimedEvent den Timer gestoppt?
95 //------------------------------------ start/ stop -----------------------------
96 private:
97 virtual BOOL Start ( void )= 0;
98 virtual void Stop ( void )= 0;
99 };
100
101 //##############################################################################
102 // TTimer16
103 //##############################################################################
104
105 // Kommentare siehe TBasicTimer
106 class _CURVECLASS TTimer16 : public TBasicTimer
107 { // Win16 Anwendungen und Win3.11, 9x, Me
108 //-----------------------------------------------------------------------------
109 // Konstruktor-Destruktor
110 public:
111 TTimer16 ( const UINT= 1000 );
112 virtual ~TTimer16 ( void );
113
114 //-----------------------------------------------------------------------------
115 // get/ set
116 public:
117 virtual BOOL IsStarted ( void );
118
119 //-----------------------------------------------------------------------------
120 // start/ stop
121 private:
122 virtual BOOL Start ( void );
123 virtual void Stop ( void );
124
125 //-----------------------------------------------------------------------------
126 // ATTRIBUTE
127 protected:
128 UINT m_TimerID; // Identifikation des Timers
129
130 //-----------------------------------------------------------------------------
131 // STATIC
132 protected:
133 static TIndList s_TimerList; // Liste der gestarteten Timer
134
135 private:
136 // das Event das alle <m_Delay> Millisek. aufgerufen wird; muss static sein!!!
137 static void CALLBACK TimedEvent( HWND, UINT, UINT, DWORD );
138 };
139
140 //##############################################################################
141 // TTimerMM
142 //##############################################################################
143
144 // Kommentare siehe TBasicTimer
145 class _CURVECLASS TTimerMM : public TBasicTimer
146 { // Win32 Anwendungen und WinNT, 2k, XP (als allein verwendetes Betriebssystem!)
147 //-----------------------------------------------------------------------------
148 // Konstruktor-Destruktor
149 public:
150 TTimerMM ( const UINT= 1000 );
151 virtual ~TTimerMM ( void );
152
153 //-----------------------------------------------------------------------------
154 // get/ set
155 public:
156 virtual BOOL IsStarted ( void );
157
158 //-----------------------------------------------------------------------------
159 // start/ stop
160 private:
161 virtual BOOL Start ( void );
162 virtual void Stop ( void );
163
164 //-----------------------------------------------------------------------------
165 // ATTIBUTE
166 protected:
167 MMRESULT m_TimerID; //Identifikation des Timers
168
169 //-----------------------------------------------------------------------------
170 // STATIC
171 private:
172 //das Event das alle <m_Delay> Millisek. aufgerufen wird; muss static sein!!!
173 static void CALLBACK TimedEvent( UINT, UINT, DWORD, DWORD, DWORD );
174 };
175
176 //##############################################################################
177 // TTimer
178 //##############################################################################
179
180 typedef TTimer16 TTimer; // Win32-Anwendungen oder Win98, WinMe, WinNT, Win2k, WinXP als Betriebsystem (unter Win3.1* und Win95: TTimerMM)
181
182 //##############################################################################
183 // ITimer
184 //##############################################################################
185
186 class TInterfaceTimer; // forward deklariert
187
188 class _CURVECLASS ITimer
189 { //abstrakte Klasse bzw. Interface
190 public:
191 virtual void OnTimer ( TBasicTimer *const )= 0;
192 };
193
194 //##############################################################################
195 // TInterfaceTimer
196 //##############################################################################
197
198 class _CURVECLASS TInterfaceTimer : public TTimer
199 {
200 //-----------------------------------------------------------------------------
201 // Konstruktor-Destruktor
202 public:
203 TInterfaceTimer ( ITimer*, const UINT= 1000 );
204
205 //-----------------------------------------------------------------------------
206 // EREIGNIS(SE)
207 protected:
208 virtual void OnTimer ( TBasicTimer *const );
209
210 //-----------------------------------------------------------------------------
211 // ATTRIBUTE
212 private:
213 ITimer *m_lnkInterface;
214 };
215
216 //##############################################################################
217 // TWindowTimer
218 //##############################################################################
219
220 class _CURVECLASS TWindowTimer : public TTimer
221 {
222 //-----------------------------------------------------------------------------
223 // Konstruktor-Destruktor
224 public:
225 TWindowTimer ( HWND, const UINT= 1000 );
226
227 //-----------------------------------------------------------------------------
228 // EREIGNIS(SE)
229 protected:
230 virtual void OnTimer ( TBasicTimer *const );
231
232 //-----------------------------------------------------------------------------
233 // ATTRIBUTE
234 private:
235 HWND m_lnkWnd;
236 };
237
238 #endif //__U_TIMER_H
239
240 //#############################################################################
241 // LASTLINE
242 //#############################################################################
243