time provider函数,来看一下,用了单例模式:
#include "util/tc_timeprovider.h"
namespace tars
{
TC_ThreadLock TC_TimeProvider::g_tl;
TC_TimeProviderPtr TC_TimeProvider::g_tp = NULL;
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();
}
TC_TimeProvider::~TC_TimeProvider()
{
{
TC_ThreadLock::Lock lock(g_tl);
_terminate = true;
g_tl.notify();
}
getThreadControl().join();
}
void TC_TimeProvider::getNow(timeval *tv)
{
int idx = _buf_idx;
*tv = _t[idx];
if(_cpu_cycle != 0 && _use_tsc) //cpu-cycle在两个interval周期后采集完成
{
addTimeOffset(*tv,idx);
}
else
{
::gettimeofday(tv, NULL);
}
}
int64_t TC_TimeProvider::getN