etimer.h
#ifndef ETIMER_H
#define ETIMER_H
#include <stdint.h>
class Etimer
{
public:
Etimer();
~Etimer();
void Start(uint64_t iMs);
void Stop();
bool CheckTimeout();
uint64_t TimeoutCount();
static uint64_t GetMicrosecond();
private:
uint64_t mCount;
uint64_t mTimeout;
uint64_t mStartTime;
uint64_t mLastTime;
uint64_t mNowTime;
};
#endif
etimer.cpp
#include "etimer.h"
#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h>
#include <sys/time.h>
#include <netinet/in.h>
#endif
Etimer::Etimer()
{
mCount = 0;
mTimeout = 0;
mStartTime = 0;
mLastTime = 0;
mNowTime = 0;
}
Etimer::~Etimer()
{
}
void Etimer::Start(uint64_t iMs)
{
mCount = 0;
mTimeout = iMs;
mStartTime = GetMicrosecond();
mLastTime = GetMicrosecond();
mNowTime = GetMicrosecond();
}
void Etimer::Stop()
{
mTimeout = 0;
mCount = 0;
mStartTime = 0;
mLastTime = 0;
mNowTime = 0;
}
bool Etimer::CheckTimeout()
{
if (mTimeout > 0)
{
mNowTime = GetMicrosecond();
if (mNowTime - mLastTime >= mTimeout)
{
mLastTime += mTimeout;
mCount++;
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
uint64_t Etimer::TimeoutCount()
{
return mCount;
}
uint64_t Etimer::GetMicrosecond()
{
uint64_t currentTime;
#ifdef WIN32
currentTime = GetTickCount();
#else
struct timeval current;
gettimeofday(¤t, NULL);
currentTime = current.tv_sec * 1000 + current.tv_usec/1000;
#endif
return currentTime;
}