tars源码分析之11

本文将深入分析TARS框架中的时间提供者函数,揭示其内部实现细节,特别是单例模式的应用。通过对关键代码的解读,理解其如何确保在整个系统中只有一个实例存在,并探讨这种设计模式在C++中的实践和意义。
摘要由CSDN通过智能技术生成

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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值