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