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;
}