Listing 1: Class TCountDownClock


#define SECOND          long
#define MILLISECOND     long
#define kHistoryEntries 10
#define kInitialWait    30

class TCountDownClock
{
public: // public member functions
 TCountDownClock(long lBytesToTransfer);
 SECOND TimeRemaining(long lBytesTransfered);
 void Start(void);
protected: // protected member functions
 void  StoreTransferRate(float fTransferRate);
 float CalculateTransferRate(float fOverallAvg);
 float WeighRecentRates(void);
protected: // protected data members
 long m_lIntervalCount;
 MILLISECOND m_msStartTime;
 MILLISECOND m_msLastTime;
 long m_lBytesToTransfer; 
 long m_lLastBytes;
 int m_nRatesStored;
 float m_fTransRateHistory[kHistoryEntries];
};
// ---------------------------------------