程序中的时间控制GetLocalTime

来源:互联网 发布:怎么检查dns linux 编辑:程序博客网 时间:2024/05/16 15:09

Target : 程序中实现每隔5秒运行一次函数,持续运行很久


在网上看了一下这方面的函数,本来想用GetTickCount()函数,但是它获取的时间最大值只有49.71天。后面会重置为0。

所以参考了GetLocalTime函数,只是它对时间的加减没有GetTickCount函数方便。综合而言还是选用GetLocalTime。


首先要执行时间差的操作,判断是否相差为5秒

bool timecom(SYSTEMTIME &firstTime, SYSTEMTIME &secondTime)// 判断时间差是否为5秒{if (1)//if (secondTime.wMilliseconds == firstTime.wMilliseconds)// NOTE : 不加这个判断条件下面得出的时间毫秒位为000{if (secondTime.wSecond > firstTime.wSecond){if (secondTime.wSecond - firstTime.wSecond == 5){return true;}elsereturn false;}else if (secondTime.wSecond < firstTime.wSecond){if (secondTime.wSecond + 60 - firstTime.wSecond == 5){return true;}elsereturn false;}elsereturn false;}elsereturn false;}

主函数

int main(void){SYSTEMTIME sys1,sys2;// 时间GetLocalTime(&sys1);// 获取初始时间while (1){//Sleep(100);GetLocalTime(&sys2);// 获取当前时间//printf("%02d:%02d.%03d\n", sys1.wMinute, sys1.wSecond, sys1.wMilliseconds);//printf("%02d:%02d.%03d\n", sys2.wMinute, sys2.wSecond, sys2.wMilliseconds);if (timecom(sys1, sys2))// 判断时间差是否为5秒{sys1 = sys2;//////////////////////////////////////////////////////////////////////////// TODO :printf("%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n", sys1.wYear, sys1.wMonth, sys1.wDay, sys1.wHour, sys1.wMinute, sys1.wSecond, sys1.wMilliseconds, sys1.wDayOfWeek);}}//printf("%d\n", sys1 - sys);//printf("%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, sys.wDayOfWeek);_getch();return 0;}

有些问题,不添加毫秒的判断出来的时间是整数,即10:20:33.000,而添加毫秒判断之后获取的就是当前时间,即10:20:30.856这种形式。为什么呢。

加了毫秒判断后再添加程序挂起(Sleep)后要执行的部分很难进去,即判断经常不成功。可能是由于Sleep函数时间不精确,影响到了上面的时间判断。




这篇文章中归纳的时间函数挺全: http://wxxweb.blog.163.com/blog/static/13512690020102102420792/


0 0
原创粉丝点击