跨平台毫秒计时器

xiaoxiao2021-02-28  100

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; }
转载请注明原文地址: https://www.6miu.com/read-64048.html

最新回复(0)