Humble Framework for SkyOS


Main Page | Modules | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

HTimer.h

Go to the documentation of this file.
00001 /****************************************************************************
00002 **
00003 **  $Header: /SkyOS.root/pig/Humble/HTimer.h 1     12/23/04 1:34p Neusel $
00004 **
00005 ****************************************************************************/
00012 #ifndef HTIMER_H
00013 #   define  HTIMER_H
00014 
00019 class HTimer : public HObjNoCopy
00020     {
00021     typedef HObjNoCopy  base_class;
00022     static StringPtr    ClassName(void) { return "HTimer"; }
00023 /*  ----------------------------------------------------------------------
00024     VARIABLES
00025     ----------------------------------------------------------------------  */
00026 protected:
00027     uint32              m_tid;          
00028     int32               m_nTimeOut;     
00029     HANDLE              m_hwndTarget;   
00030 /*  ----------------------------------------------------------------------
00031     CTOR / DTOR
00032     ----------------------------------------------------------------------  */
00033 public:
00034     HTimer(int32 nTimeOut = 0) : m_tid(0), m_nTimeOut(nTimeOut), m_hwndTarget(NULL)
00035         { ASSERT(nTimeOut >= 0); }
00036         
00037     virtual             
00038     ~HTimer(void)
00039         { (void) Stop(); }
00040 /*  ----------------------------------------------------------------------
00041     METHODS
00042     ----------------------------------------------------------------------  */
00043 public:
00054     ErrCode     
00055     Reached(void)
00056         {
00057         ErrCode     ec = HError::NoError();
00058         
00059         if (IsActive())
00060             {
00061             DEBUG_LOG("HTimer::Reached() => #%lu.\n", m_tid);
00062             m_tid = 0;
00063             }
00064             
00065         return ec;
00066         }
00077     ErrCode     
00078     Restart(void)
00079         { 
00080         ErrCode     ec = HError::NoError();
00081         
00082         DEBUG_LOG("HTimer::Restart() => #%lu.\n", m_tid);
00083 
00084         if (!IsActive() || 
00085             (ec = Stop()) == NO_ERROR)
00086             {
00087             ec = Start();
00088             }
00089                 
00090         return ec;
00091         }
00099     ErrCode
00100     Start(HANDLE hWnd = NULL, int32 nTimeOut = 0)
00101         {
00102         ErrCode     ec = HError::NoError();
00103 
00104         if (m_nTimeOut <= 0 || nTimeOut > 0)
00105             m_nTimeOut = nTimeOut;
00106         
00107         if (NULL_HND(m_hwndTarget) || GOOD_HND(hWnd))
00108             m_hwndTarget = hWnd;
00109 
00110         if (GOOD_HND(hWnd) && m_nTimeOut > 0)
00111             {
00112             if (IsActive())
00113                 {
00114                 DEBUG_LOG("HTimer::Start() => started an active timer.\n");
00115                 (void) Stop();
00116                 }
00117 
00118             m_tid = GI_set_timer(m_hwndTarget, m_nTimeOut);
00119                 
00120             if (IsActive())
00121                 {
00122                 DEBUG_LOG(  "HTimer::Start() => started #%lu with %ld second timeout.\n", 
00123                             m_tid, m_nTimeOut);
00124                 }
00125             else
00126                 ec = HError::Set(ERR_API_ERROR, __FILE__, __LINE__);
00127             }
00128         else
00129             ec = HError::Set(ERR_BAD_PARAMETER, __FILE__, __LINE__);
00130 
00131         return ec;
00132         }
00137     ErrCode
00138     Stop(void)
00139         {
00140         ErrCode     ec = HError::NoError();
00141         
00142         if (IsActive())
00143             {
00144             if (GI_kill_timer(m_tid) == S_OK)
00145                 {
00146                 DEBUG_LOG("HTimer::Stop() => stopped #%lu.\n", m_tid);
00147                 }
00148             else
00149                 ec = HError::Set(ERR_API_ERROR, __FILE__, __LINE__);
00150 
00151             m_tid = 0;
00152             m_hwndTarget = NULL;
00153             }
00154 
00155         return ec;
00156         }
00157 /*  ----------------------------------------------------------------------
00158     GETTERS & SETTERS
00159     ----------------------------------------------------------------------  */
00160 public:
00163     inline uint32       GetID(void) const
00164                             { return m_tid; }
00167     inline HANDLE       GetTarget(void) const
00168                             { return m_hwndTarget; }
00171     inline int32        GetTimeOut(void) const
00172                             { return m_nTimeOut; }
00176     ErrCode             SetTarget(HANDLE hWnd)
00177                             { 
00178                             ErrCode ec = HError::NoError();
00179                             
00180                             if (GOOD_HND(hWnd))
00181                                 m_hwndTarget = hWnd;
00182                             else
00183                                 ec = HError::Set(ERR_BAD_PARAMETER, __FILE__, __LINE__);
00184                             
00185                             return ec;
00186                             }
00190     ErrCode             SetTimeOut(int32 nTimeOut)
00191                             {
00192                             ErrCode ec = HError::NoError();
00193                             
00194                             if (nTimeOut > 0)
00195                                 {
00196                                 if (!IsActive())
00197                                     m_nTimeOut = nTimeOut;
00198                                 else
00199                                     ec = HError::Set(ERR_NOT_IMPLEMENTED, __FILE__, __LINE__);
00200                                 }
00201                             else
00202                                 ec = HError::Set(ERR_BAD_PARAMETER, __FILE__, __LINE__);
00203 
00204                             return ec;
00205                             }
00206 /*  ----------------------------------------------------------------------
00207     INLINES
00208     ----------------------------------------------------------------------  */
00211     inline bool         IsActive(void) const
00212                             { return (m_tid > 0); }
00213     };
00214 #endif  // HTIMER_H
00215 /****************************************************************************
00216 **
00217 **  $History: HTimer.h $
00218  * 
00219  * *****************  Version 1  *****************
00220  * User: Neusel       Date: 12/23/04   Time: 1:34p
00221  * Created in $/SkyOS.root/pig/Humble
00222  * Posted as HFramework-debug 20041223
00223 **
00224 **  -------------------------------------------------------------------------
00225 **
00226 **  End of HTimer.h
00227 **
00228 ****************************************************************************/