调用C库函数time(NULL)时出现的时间倒转现象?
在WINDOWS 7 系统(开发工具为VC)上开发了一软件,软件程序中的某一部分
的处理逻辑为:先记录下一开始时间,然后在开始时间之后的两秒内
一直在检测某种状态,如果检测到该状态,则返回true,如果没有检测到该状态则返回false。相应的代码如下:
bool is_status_change()
{
bool blnret = false;
unsigned int start_secs;
unsigned int cur_secs;
do_some_thing();
start_secs =time(NULL); //获得系统时间(单位:秒)
while ( (cur_secs= (unsigned int)time(NULL)) - start_secs <=2 )
{
int checkret = check_status();
if (checkret == 1)
{
blnret =true;
break;
}
Sleep(30);
}
return blnret;
}
整个软件大概运行了有4天, 其中is_status_change是以很频繁的次数被调用着,理论上均可以返回true的正确值。
但是通过日志记录可以得知,is_status_change有一次返回了false的错误值,究其错误的原因,竟然是发现
time(NULL)函数会发生时间倒回的现象,在 while ( (unsigned int)time(NULL) - start_secs <=2 )语句中
的获取的当前时间cur_secs比开始时间start_secs要小,由于都是unsigned值,一相减,负数变成很大的正数了。
大概的日志记录如下:
2015-01-05 21:08:13 is_status_change 返回true
2015-01-05 21:08:14 is_status_change 返回true
.....
2015-01-05 21:09:10 is_status_change 返回true
2015-01-05 21:09:11 is_status_change 返回true
2015-01-05 21:09:11 is_status_change 返回true
2015-01-05 21:09:12 is_status_change 返回true
2015-01-05 21:08:13 is_status_change 返回false
2015-01-05 21:08:14 is_status_change 返回true
2015-01-05 21:08:14 is_status_change 返回true
............
2015-01-05 21:09:09 is_status_change 返回true
2015-01-05 21:09:10 is_status_change 返回true
通过日志记录可以推断得出,time()函数在某些时候返回的时间秒数会比前一阶段所调用时返回的要小,即会发生时间倒转的现象,想请教各位高手,我的这个推断是否正确合理,各位是否有在实际情况遇到这种现象,以及怎么避免这种异常现象的发生?谢谢!
的处理逻辑为:先记录下一开始时间,然后在开始时间之后的两秒内
一直在检测某种状态,如果检测到该状态,则返回true,如果没有检测到该状态则返回false。相应的代码如下:
bool is_status_change()
{
bool blnret = false;
unsigned int start_secs;
unsigned int cur_secs;
do_some_thing();
start_secs =time(NULL); //获得系统时间(单位:秒)
while ( (cur_secs= (unsigned int)time(NULL)) - start_secs <=2 )
{
int checkret = check_status();
if (checkret == 1)
{
blnret =true;
break;
}
Sleep(30);
}
return blnret;
}
整个软件大概运行了有4天, 其中is_status_change是以很频繁的次数被调用着,理论上均可以返回true的正确值。
但是通过日志记录可以得知,is_status_change有一次返回了false的错误值,究其错误的原因,竟然是发现
time(NULL)函数会发生时间倒回的现象,在 while ( (unsigned int)time(NULL) - start_secs <=2 )语句中
的获取的当前时间cur_secs比开始时间start_secs要小,由于都是unsigned值,一相减,负数变成很大的正数了。
大概的日志记录如下:
2015-01-05 21:08:13 is_status_change 返回true
2015-01-05 21:08:14 is_status_change 返回true
.....
2015-01-05 21:09:10 is_status_change 返回true
2015-01-05 21:09:11 is_status_change 返回true
2015-01-05 21:09:11 is_status_change 返回true
2015-01-05 21:09:12 is_status_change 返回true
2015-01-05 21:08:13 is_status_change 返回false
2015-01-05 21:08:14 is_status_change 返回true
2015-01-05 21:08:14 is_status_change 返回true
............
2015-01-05 21:09:09 is_status_change 返回true
2015-01-05 21:09:10 is_status_change 返回true
通过日志记录可以推断得出,time()函数在某些时候返回的时间秒数会比前一阶段所调用时返回的要小,即会发生时间倒转的现象,想请教各位高手,我的这个推断是否正确合理,各位是否有在实际情况遇到这种现象,以及怎么避免这种异常现象的发生?谢谢!
...全文
相关推荐
使用C语言中的time函数获取系统时间
在C语言中可以使用time函数来获取系统时间,以下对time函数进行了介绍,需要的朋友可以过来参考下
linux下用time(NULL)函数和localtime()获取当前时间的方法
主要介绍了linux下用time(NULL)函数和localtime()获取当前时间的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
time库函数
time函数库常用函数基本功能和用法解析
timeGetTime() 、time(NULL)、localtime这三个函数有什么区别呢?
timeGetTime() 、time(NULL)、localtime这三个函数有什么区别呢? 这个都是本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的
c语言time()
C语言中各种描述时间的函数,c语言 time() 函数



