• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-06-13)  Socket library |   3 条评论  14 
    文章评分 0 次,平均分 0.0

    该类主要是生成一个时间节点,对于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
    
    
     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/1511.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享