⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.h

📁 此程序为分布式坦克游戏
💻 H
字号:
/*****************************************************************************
*                                                                             
*   Timer.h                                                            
*                                                                             
*   Electrical Engineering Faculty - Software Lab                             
*   Spring semester 1998                                                      
*                                                                             
*   Tanks game                                                                
*                                                                             
*   Module description: Implements the time calculation used to synch the 
*                       local machine time with the host machine time.
*                       
*                                                                             
*   Authors: Eran Yariv - 28484475                                           
*            Moshe Zur  - 24070856                                           
*                                                                            
*                                                                            
*   Date: 23/09/98                                                           
*                                                                            
******************************************************************************/
#ifndef TIMER_H
#define TIMER_H

#include "stdafx.h"

/*  If VAN_JACOBSON is defined, the Van-Jacobon technique is used to calc the delta
    between the server time (remote) and the client time (local).
    (as in TCP round-trip delay estimation algorithms)

    Otherwise, regular smoothed average is used to calc the delta
    between the server time (remote) and the client time (local).


    Refer to Dr. Dobbs #283, March 98, pp. 127-130 for more details.
*/

class CTimer
{
public:

    CTimer              (BOOL bForceLowResTimers = FALSE);   // If bForceLowResTimers, GetTickCount is used
    virtual             ~CTimer () {}

    DWORD               GetRemoteTime ();
    DWORD               GetLocalTime (DWORD dwRemoteTime);
    DWORD               GetLocalTime ();

protected:

    virtual DWORD       UpdateDelta (DWORD) = 0;
    LONG                m_lLastDelta;       // Delta = LocalTime - RemoteTime
    BOOL                m_bFirstSample;

private:
    static DWORD CALLBACK   SampleLocalTimeWithPerfCounters();
    static LONGLONG     m_llFreq;
    DWORD               (CALLBACK* m_pActualSampleFunction) ();
};

class CVanJacobsonTimer : public CTimer
{
public:
    CVanJacobsonTimer   (BOOL bForceLowResTimers = FALSE);   // If bForceLowResTimers, GetTickCount is used
    virtual             ~CVanJacobsonTimer() {}
private:
    virtual DWORD       UpdateDelta (DWORD);

    #define VJ_g        double(0.125)
    #define VJ_h        double(0.250)
    #define VJ_f        double(4.000)

    double              m_dPrevSRTT;        // Previous Smoothed Round-Trip Time
    double              m_dPrevSDEV;        // Previous standard deviation
};

class CSmoothedAverageTimer : public CTimer
{
public:
    CSmoothedAverageTimer (BOOL bForceLowResTimers = FALSE);   // If bForceLowResTimers, GetTickCount is used
    virtual             ~CSmoothedAverageTimer() {}
private:
    virtual DWORD       UpdateDelta (DWORD);

    #define ALPHA           double(0.5)
    #define ONE_MINUS_ALPHA double (1.0 - ALPHA)

    double                          m_dPrevDelta;
};


// Inline sections:
#include <Timer.inl>

// The TIMER_CLASS macro is used to specify the type of timer in use throughout
// the program. It can be either CSmoothedAverageTimer or CVanJacobsonTimer.
#define TIMER_CLASS         CSmoothedAverageTimer     

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -