ACE_Time_Value使用注意事项(续)
2013-06-10 17:05
549 查看
ACE_Time_Value保存了两个时间属性:秒和毫秒,各自用一个32bit有符号整数来存储。ACE_Time_Value本身可以用来表达相对时间和绝对时间,用于相对时间时它表示两个绝对时间之间的差值(秒的差值和毫秒的差值,注意这两个属性是独立的),由于32bit整数最大值的限制,它们各自有自己的差值上限,大约是正负68年(用秒属性时),正负25天(用毫秒属性时)的样子。当用于表示绝对时间时,它表示从1970年1月1日到当前时间的历时秒数,其秒值最大只能表示68年,也就是到2038年(1月19日03:14:07,星期二(UTC)),这就是同样著名的2038年时间跳转问题(和著名的千年虫问题相比)。
知道了这些限制之后,当我们使用ACE_Time_Value的sec(),msec()两个方法来获取时间差时,要特别注意它们的时间跃迁问题。由于所有的绝对时间都可以对应到某个ACE_Time_Value值,所以当你需要测试这个时间跳跃问题对你应用的影响时,可以手工将系统时间设为某个特定时间,然后运行你的应用,看看时间跳转时对你的应用有没有影响。
我简单试了一下,找了两个时间会发生跳跃的点(主要是毫秒跳跃;秒跳跃的可能性不大,除非你的应用经常要进行超过68年以上的时间差值计算!),可以用来做毫秒时间跳跃的测试场景。
1 当使用long来存储msec()的值时
2013年6月1日 21:49, msec()的值从负值跨过0到正值
2013年6月26日 18:20, msec()的值从正的最大值0x7F FF FF FF跳到负的最大值
2 当使用unsigned long来存储msec()的值时
2013年6月1日 21:49, msec()的值从最大值(0xFF FF FF FF)跳变到0
2013年6月26日 18:20, msec()的值(跨过0x7F FF FF FF)继续增加
知道了这些限制之后,当我们使用ACE_Time_Value的sec(),msec()两个方法来获取时间差时,要特别注意它们的时间跃迁问题。由于所有的绝对时间都可以对应到某个ACE_Time_Value值,所以当你需要测试这个时间跳跃问题对你应用的影响时,可以手工将系统时间设为某个特定时间,然后运行你的应用,看看时间跳转时对你的应用有没有影响。
我简单试了一下,找了两个时间会发生跳跃的点(主要是毫秒跳跃;秒跳跃的可能性不大,除非你的应用经常要进行超过68年以上的时间差值计算!),可以用来做毫秒时间跳跃的测试场景。
1 当使用long来存储msec()的值时
2013年6月1日 21:49, msec()的值从负值跨过0到正值
2013年6月26日 18:20, msec()的值从正的最大值0x7F FF FF FF跳到负的最大值
2 当使用unsigned long来存储msec()的值时
2013年6月1日 21:49, msec()的值从最大值(0xFF FF FF FF)跳变到0
2013年6月26日 18:20, msec()的值(跨过0x7F FF FF FF)继续增加
相关文章推荐
- ACE_Time_Value使用注意事项
- vc中使用ace的注意事项
- 关于使用<s:property value="">形式取得 数据库图片地址的注意事项
- go里面select-case和time.Ticker的使用注意事项
- JQuery选择器之[attribute^=value]使用注意事项
- go里面select-case和time.Ticker的使用注意事项
- Ansj标准分词使用注意事项(MyStaticValue.isRealName属性)
- ACE服务端编程1:使用VS2010编译ACE6.0及从ACE5.6升级的注意事项
- slider控件设置value时使用 slider1_ValueChanged 事件注意事项
- linux下使用gettimeofday获取当前时间的注意事项
- valueChangeListener使用注意事项
- ACE Reactor FrameWork使用注意事项
- ACE_Message_Block的使用注意事项
- 微信小程序节点查询方法:wx.createSelectorQuery()的使用场景与注意事项
- [Java] Java中可变长参数的使用及注意事项
- Android Studio 中使用SVN注意事项
- sybaseIQ索引类型和使用注意事项
- c++全局变量使用中的一些注意事项
- Unity3d的2D Toolkit中tk2dUISoundItem使用注意事项
- infoview使用的注意事项