OSDN Git Service

#xxxxx DTXViewerのプロジェクトを追加。
[dtxmania/dtxmania.git] / DTXViewerプロジェクト / @FDK10プロジェクト / CTimer.h
1 #pragma once
2
3 // CTimer: \94Ä\97p\83^\83C\83}
4 //    \95\81\92i\82Í CTimerEx \82ð\8eg\82¤\82×\82µ\81B
5
6 namespace FDK {
7         namespace General {
8
9 #define INIT_TIME       (-1.0)
10
11 #define TIMERTYPE_PERFORMANCECOUNTER    0       // \8d\82\90¸\93x\83^\83C\83}
12 #define TIMERTYPE_TIMEGTTIME                    1       // \83}\83\8b\83`\83\81\83f\83B\83A\83^\83C\83}
13 #define TIMERTYPE_GETTICKCOUNT                  2       // \8b\8c\8e®\83^\83C\83}
14 #define TIMERTYPE_UNKNOWN                               99      // \95s\92è
15
16 class CTimer
17 {
18 public:
19
20 public:
21         void    Init( int timerType=TIMERTYPE_UNKNOWN );        // \8f\89\8aú\89»
22         void    Term();                                                                         // \8fI\97¹\8f\88\97\9d
23         void    Reset();                                                                        // \83^\83C\83}\82ð\83\8a\83Z\83b\83g\82·\82é\81BPAUSE \82Í\82·\82×\82Ä\89ð\8f\9c\82³\82ê\82é\81B
24         double  Get();                                                                          // \8c»\8dÝ\8e\9e\8d\8f\82Ì\8eæ\93¾\81BPAUSE\92\86\82È\82çPAUSE\8e\9e\93_\82Ì\8e\9e\8d\8f\82ª\95Ô\82³\82ê\82é\81B
25         void    Set( double dbTime );                                           // \8c»\8dÝ\8e\9e\8d\8f\82Ì\90Ý\92è\81BPAUSE\92\86\82È\82çPAUSE\8e\9e\93_\82Ì\8e\9e\8d\8f\82à\95Ï\8dX\82³\82ê\82é\81B
26         void    Pause();                                                                        // \88ê\8e\9e\92â\8e~\81B
27         void    Restart();                                                                      // \88ê\8e\9e\92â\8e~\8cã\82Ì\8dÄ\8aJ\81B
28         double  GetSysTime()    {return GetTime();}             // \90â\91Î\8e\9e\8d\8f\81i\83V\83X\83e\83\80\8bN\93®\8cã\82©\82ç\82Ì\8co\89ß\8e\9e\8d\8f\81j\82ð\95Ô\82·\81B
29         int             GetTimerType() { return timerType; }
30
31 public:
32         CTimer() {};
33
34 protected:
35         double  dbOffsetTime;           //      \83I\83t\83Z\83b\83g\92l
36         double  dbPauseTime;            //      Pause\82©\82¯\82½\82Æ\82«\82ÌTime
37         int             nPaused;                        //      pause\92\86\82È\82ç0\82æ\82è\91å\82«\82¢\90\94
38         UINT    uTimerID;                       //  \83^\83C\83}\8a\84\82è\8d\9e\82ÝID
39
40 protected:
41         static int                              nRefCount;              // \8eQ\8fÆ\89ñ\90\94
42         static int                              timerType;              // \8ed\97l\82·\82é\83^\83C\83}
43         static TIMECAPS                 dwTimeCaps;             // timeGetTime \97p
44         static LARGE_INTEGER    liFrequency;            // \8d\82\90¸\93x\83^\83C\83}\82Ì\89ð\91\9c\93x
45
46 protected:
47         // \83V\83X\83e\83\80\8bN\93®\8cã\82Ì\8co\89ß\8e\9e\8aÔ\82ð\83~\83\8a\95b\82Å\95Ô\82·\81B
48         static double GetTime();
49
50         // \8d\82\90¸\93x\83^\83C\83}\82Ì\8eg\97p\89Â\94Û\82ð\8am\94F\82µ\81A\8eg\82¦\82é\82È\82ç\90Ý\92è\82·\82é\81B
51         // \8eg\82¦\82é\82È\82ç true\81A\8eg\82¦\82È\82¢\82È\82ç false \82ð\95Ô\82·\81B
52         static bool CheckAndSetA_HighPerformanceTimer();
53         
54         // \83}\83\8b\83`\83\81\83f\83B\83A\83^\83C\83}\82Ì\8eg\97p\89Â\94Û\82ð\8am\94F\82µ\81A\8eg\82¦\82é\82È\82ç\90Ý\92è\82·\82é\81B
55         // \8eg\82¦\82é\82È\82ç true\81A\8eg\82¦\82È\82¢\82È\82ç false \82ð\95Ô\82·\81B
56         static bool CheckAndSetB_MultimediaTimer();
57         
58         // \8b\8c\8e®\83^\83C\83}\82Ì\90Ý\92è\82ð\8ds\82¤\81B
59         // \8fí\82É true \82ð\95Ô\82·\81B
60         static bool SetC_OldTimer();
61 };
62
63 /////////////////////////////
64 // CTimerEx: 
65 //    (1) Reset(), Set(time) \82©\82ç\82Ì\8co\89ß\8e\9e\8aÔ(ms)\82ð Get() \82Å\8eæ\93¾\81B
66 //    (2) Flush() \82ð\8cÄ\82Î\82È\82¢\8cÀ\82è\8e\9e\8d\8f\82Í\8dX\90V\82³\82ê\82È\82¢\81B
67 //    (3) Set(time) \82Å\8e\9e\8d\8f\82ð\90Ý\92è\82Å\82«\82é\81B
68 //    (4) Pause(), Restart() \82Å\88ê\8e\9e\92â\8e~\81E\89ð\8f\9c\82ª\82Å\82«\82é\81B
69 //    (5) GetSysTime() \82Å\90â\91Î\8e\9e\8d\8f\82ð\8eæ\93¾\82Å\82«\82é\81B
70 //    (6) SetTimer(proc), KillTimer() \82Å\83^\83C\83}\8a\84\82è\8d\9e\82Ý\82Ì\90Ý\92è\82Æ\89ð\8f\9c\82ª\82Å\82«\82é\81B
71 class CTimerEx : public CTimer
72 {
73 public:
74         void   Init( int timerType=TIMERTYPE_UNKNOWN )
75                 {CTimer::Init(timerType); Reset();}
76         void   Reset()                          {Flush();dbOffsetTime=dbPauseTime=dbTimeGetTime;nPaused=0;}
77         double Get()                            {return (nPaused>0)? dbPauseTime-dbOffsetTime : dbTimeGetTime-dbOffsetTime;}
78         double GetReal()                        {return CTimer::Get();}
79         void   Set( double dbTime )     {if(nPaused>0){dbOffsetTime=dbPauseTime-dbTime;}else{dbOffsetTime=dbTimeGetTime-dbTime;}}
80         void   Pause()                          {if(nPaused++ == 0){dbPauseTime=dbTimeGetTime;}}
81         void   Restart()                        {if(--nPaused == 0){dbOffsetTime+=dbTimeGetTime-dbPauseTime;}}
82
83         void Flush()                            {dbTimeGetTime=CTimer::GetTime();}
84         double db\91O\89ñReset\82µ\82½\8e\9e\8d\8f()            {return dbOffsetTime;}
85
86 protected:
87         double dbTimeGetTime;                   //      \91O\89ñFlush\82µ\82½\8e\9e\8d\8f
88 };
89
90         }//General
91 }//FDK
92
93 using namespace FDK::General;