ACE_Time_Value的赋值效率

本文探讨了ACE_Time_Value在赋值过程中存在的效率问题,特别是其构造函数和set函数因调用normalize函数而导致的低效行为。建议使用sec和usec函数直接赋值以避免此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

15         ACE_Time_Value的赋值效率

ACE_Time_Value是使用ACE会大量使用类。但是他的部分函数没有高效的实现。比如构造函数:

ACE_INLINE

ACE_Time_Value::ACE_Time_Value (time_t sec, suseconds_t usec)

set函数

ACE_INLINE void

ACE_Time_Value::set (time_t sec, suseconds_t usec)

为了规范用户的赋值,在这些函数的最后都会调用normalize函数。

void ACE_Time_Value::normalize (void)

但如果你的赋值的微秒数值不合适(过大)时,normalize却不是一个高效实现。下面简单摘取normalize的一段代码。

void

ACE_Time_Value::normalize (void)

{

 

  //如果赋值的大于微秒数值大于1s

  if (this->tv_.tv_usec >= ACE_ONE_SECOND_IN_USECS)

    {

      /*! /todo This loop needs some optimization.       */

      //作者都认为这个代码要优化

      //那么进入循环,每次减去1000000的微秒单位,在秒的单位+1,上帝呀。

do

        {

          ++this->tv_.tv_sec;

          this->tv_.tv_usec -= ACE_ONE_SECOND_IN_USECS;

        }

      while (this->tv_.tv_usec >= ACE_ONE_SECOND_IN_USECS);

    }

  …………

}

很不理解为什么会写成如此的低效。为什么不直接使用除法呢,我很不理解。所以如果你在代码的主循环中如果使用了ACE_Time_Value,使用上面的那些函数就可能掉入陷阱。

解决方法是尽量使用函数secusec赋值,这些函数不会调用normalize,这两个函数会直接赋值。如果非要使用上面的那些函数方式,也一定不要使用过大的(错误的)时间参数。

这个问题到 5.6.1 还没有得到修正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值