EventTime类

2013年6月13日 由 Creater 留言 »

该类主要是生成一个时间节点,对于linux系统使用gettimeofday来获取时间并转换为微秒。并且该类重载了减号与小于符号操作符。

在该类对象生成的时候,可以使用默认构造函数产生以微秒表示的当前时间。
使用带参数的构造函数和会以当前时间作为基准来产生一个将来时间点。
主要的时间获取和处理函数是由tick()来完成。

#ifndef _SOCKETS_EventTime_H
#define _SOCKETS_EventTime_H

#include "sockets-config.h"
#ifdef SOCKETS_NAMESPACE
namespace SOCKETS_NAMESPACE {
#endif


#if defined( _WIN32) && !defined(__CYGWIN__)
typedef __int64 mytime_t;
#else
#include <inttypes.h> // int64_t
typedef int64_t mytime_t;
#endif


/** \defgroup timer EventTimer event handling */

/** EventTime primitive, returns current time as a 64-bit number.
	\ingroup timer */
class EventTime
{
public:
	EventTime();
	EventTime(mytime_t sec,long usec);
	~EventTime();

	static mytime_t Tick();

	operator mytime_t () { return m_time; }
	EventTime operator - (const EventTime& x) const;
	bool operator < (const EventTime& x) const;

private:
	EventTime(const EventTime& ) {} // copy constructor
	EventTime& operator=(const EventTime& ) { return *this; } // assignment operator
	mytime_t m_time;
};



#ifdef SOCKETS_NAMESPACE
}
#endif

#endif // _SOCKETS_EventTime_H

#ifdef MACOSX
#include <stdint.h>
#include <sys/types.h>
#include <signal.h>
#endif
#include "EventTime.h"
#ifdef _WIN32
#include <windows.h>
#else
#include <sys/select.h>
#include <sys/time.h>
#endif



#ifdef SOCKETS_NAMESPACE
namespace SOCKETS_NAMESPACE {
#endif


EventTime::EventTime() : m_time(Tick())
{
}


EventTime::EventTime(mytime_t sec,long usec) : m_time(Tick())
{
	m_time += sec * 1000000 + usec;
}


EventTime::~EventTime()
{
}


mytime_t EventTime::Tick()
{
	mytime_t t;
#ifdef _WIN32
	FILETIME ft;
	GetSystemTimeAsFileTime(&ft);
	t = ft.dwHighDateTime;
	t = t << 32;
	t += ft.dwLowDateTime;
	t /= 10; // us
#else
	struct timeval tv;
	struct timezone tz;
	gettimeofday(&tv, &tz);
	t = tv.tv_sec;
	t *= 1000000;
	t += tv.tv_usec;
#endif
	return t;
}


EventTime EventTime::operator - (const EventTime& x) const
{
	EventTime t;
	t.m_time = m_time - x.m_time;
	return t;
}


bool EventTime::operator < (const EventTime& x) const
{
	return m_time < x.m_time;
}


#ifdef SOCKETS_NAMESPACE
}
#endif

广告位

发表评论

你必须 登陆 方可发表评论.