2010年1月21日 星期四

CuTimer - specialized type of clock.

// specialized type of clock. 


CuTimer _Timer;

while(1)
{
    _Timer.Make_Tick_Data();

    if( _Timer.GetTimeOut(9) )
        ....

    _Timer.Tick_Data_Clear();
}

// CuTimer.h

class CuTimer
{

public:
    BOOL GetTimeOut(int i); // table_1

    void Make_Tick_Data();
    void Tick_Data_Full();
    void Tick_Data_Clear();
    CuTimer();
    ~CuTimer();

private:
    DWORD More_Time[20];
    DWORD lastTickCount[20];
    BYTE Time_move[20];
    DWORD thisTickCount;

};



// CuTimer.cpp


CuTimer::CuTimer(void)
{

    this->Tick_Data_Clear();

}

CuTimer::~CuTimer(void)
{
}


void CuTimer::Tick_Data_Clear()
{
    memset( Time_move, 0, sizeof Time_move );
}

void CuTimer::Tick_Data_Full()
{
    memset( Time_move, 1, sizeof Time_move );
}

void CuTimer::Make_Tick_Data()
{
    static DWORD delay[20] = {
          10,     //0 , 1/100 sec 0.01
          16,     //1 , 1/60  sec 0.016
          17,     //2 , 1/56  sec 0.017
          20,     //3 , 1/48  sec 0.020
          25,     //4 , 1/40  sec 0.025
          33,     //5 , 1/30  sec 0.033
          41,     //6 , 1/24  sec 0.041
          62,     //7 , 1/16  sec 0.062
          83,     //8 , 1/12  sec 0.083
          125,    //9 , 1/8   sec 0.125
          166,    //10, 1/6   sec 0.166
          250,    //11, 1/4   sec 0.250
          333,    //12, 1/3   sec 0.333
          500,    //13, 1/2   sec 0.5
          1000,   //14, 1     sec
          2000,   //15, 2     sec
          3000,   //16, 3     sec
          4000,   //17, 4     sec
          5000,   //18, 5     sec
          8000    //19, 8     sec
        };

    thisTickCount = GetTickCount();
    for (int i = 0; i < 20;  i++)
    {
        if( (thisTickCount - lastTickCount[i]) >= delay[i])
        {
        More_Time[i] = (thisTickCount - lastTickCount[i]) - delay[i];

        lastTickCount[i] = thisTickCount;

        if( More_Time[i] < 30 )
          lastTickCount[i] -= More_Time[i];

        Time_move[i]++;
        }
    }
}

BOOL CuTimer::GetTimeOut(int i)
{
    return (BOOL)Time_move[i];
}

1 則留言:

  1. 寫 貪吃蛇, 俄羅斯小遊戲, 用這種小計時器非常的方便.

    回覆刪除