一个看似简单的时间操作, 居然被封装成一个牛逼哄哄的类, 来看看TC_TimeProvider
智能指针如下:
typedef TC_AutoPtr<TC_TimeProvider> TC_TimeProviderPtr;
别忘了, 这里的TC_TimeProvider必须继承TC_HandleBase, 看了一下, 果然是:
class TC_TimeProvider : public TC_Thread, public TC_HandleBase
TC_Thread是一个很重要的类, 之前介绍过了, 里面有线程锁。
这两行代码真好, 以后直接用:
#define TNOW tars::TC_TimeProvider::getInstance()->getNow()
#define TNOWMS tars::TC_TimeProvider::getInstance()->getNowMs()
这里是单例:
TC_TimeProvider* TC_TimeProvider::getInstance()
{
if(!g_tp)
{
TC_ThreadLock::Lock lock(g_tl);
if(!g_tp)
{
g_tp = new TC_TimeProvider();
g_tp->start();
}
}
return g_tp.get();
}
为什么有两次if判断?之前在单例类中见过。
这里的强转不能漏:
int64_t TC_TimeProvider::getNowMs()
{
struct timeval tv;
getNow(&tv);
return tv.tv_sec * (int64_t)1000 + tv.tv_usec/1000;
}
TC_TimeProvider其实很简单, 就是一些时间的基本操作而已, 还不全呢。