ACE_Time_Value使用注意事项
来源:互联网 发布:狙击模拟软件 编辑:程序博客网 时间:2024/06/06 00:17
ACE自定义了一个重要的时间类ACE_Time_Value来管理与时间相关的数据:
/**
* @class ACE_Time_Value
*
* @brief Operations on "timeval" structures, which express time in
* seconds (secs) and microseconds (usecs).
*
* This class centralizes all the time related processing in
* ACE. These time values are typically used in conjunction with OS
* mechanisms like <select>, <poll>, or <cond_timedwait>.
*/
class ACE_Export ACE_Time_Value
。。。
这个类在很多地方要用到,比如我们经常使用绝对时间来做超时判断等:
ACE_Time_Value tv = ACE_OS::gettimeofday() + ACE_Time_Value(1);//当前时间过1秒
if (m_task.putq(mb, &tv) == -1)
{
//m_task消息队列插入失败
...
}
在与这个时间类相关的使用中,有几个特别需要注意的问题:
1、 经常通过ACE_Time_Value类来保存绝对时间或相对时间,用其msec()成员函数可以返回它对应时间的毫秒值,msec()函数返回类型是long,而不是unsigned long,所以它的值可能为负,为避免这个情况,请把它转换为无符号数来使用。比如:
取得当前绝对时间对应的毫秒值:
unsigned long lCurTime = (unsigned long)(ACE_OS::gettimeofday().msec());
保存相对时间:
ACE_Time_Value tv(100, 0);//构造一个100秒的时间
2、msec()函数返回值转换成无符号数之后,其取值范围0~0xFF FF FF FF, 即0~4294967295毫秒,也就是4294967295/1000/3600/24=49.71天!
这也就是说,这个值每过49天就会归0一次,如果你有功能要通过这个值来判断时间大小或计算时间差,必须小心这个问题。因为这种问题49天才会发生一次,一般很难遇到;等发生了,一重启又会消失,属于特别难查的问题!
3、更改操作系统时间除了导致ACE计时器(比如通过ACE_Reactor::instance()->schedule_timer注册的计时器)调度发生混乱(比如你把系统时间调大,很可能导致计时器事件长期不产生!),还会导致ACE_OS::gettimeofday()之类的操作取值发生变化,这也会导致计算时间差之类的功能发生异常。所以华为T2000网管明确规定,服务运行期间不能更改系统时间!!!
- ACE_Time_Value使用注意事项
- ACE_Time_Value使用注意事项(续)
- ACE_Time_Value的赋值效率
- ACE_Date_Time、ACE_Time_Value、ACE_OS::gettimeofday() 5.0
- ACE ACE_Time_Value和ACE_Message_Queue的点滴
- Masonry使用注意事项,原生约束使用注意事项
- String 使用注意事项
- 笔记本使用前注意事项
- HashMap使用的注意事项
- Hibnerate Annotation使用注意事项
- JChatbox使用注意事项
- Gridview+sqldatasource使用注意事项
- SVN使用注意事项之一
- javabean使用注意事项
- UltraWebGrid使用,注意事项集合
- MagicAjax使用及注意事项
- MagicAjax使用及注意事项
- MagicAjax使用及注意事项
- 小弟今天刚刚注册还请大家多多关照~
- DirectShow 和Direct Show
- 以太网交换机基本原理和转发流程总结
- 给select控件在指定位置插入option(javascript)
- 给select控件在指定位置插入option(javascript)
- ACE_Time_Value使用注意事项
- scp—ssh copy
- qt鼠标事件总结(一)
- web四层架构
- 窗体控制常见属性
- Delphi结束进程模块
- QT鼠标事件总结(二)示例
- 多线程
- 代码中的”代理“思想