一、time函数
函数名:time()
功能:获取当前的系统时间
用法:time_ttime(time_t * time)
对应的头文件:time.h
说明:
time函数的返回值是long的类型,
其精度为秒,
其形参一般选为NULL(即time(NULL)).
其值为从CUT(CoordinatedUniversal Time)时间(即1970年1月1日00:00:00,也就是UNIX系统的Epoch时间)到当前时刻的秒数,但因为“time_t“使用一个有符号的32位整数(signed int32)来存储计算的秒数,所以其最后时间是2147483647秒(也就是格林乔治时间2038年1月19日凌晨03:14:07),但就是个小知识点,不用太关心。
因为time的精度为秒,所以如果对一些时间要求更精确点,便得使用精度更高的时间函数,不然其结果就会如下面的程序一样,结果一直一样,这是因为短期的循环计算机不会花费太多的时间。
# include
二、更高精度的时间函数
1、gettimeofday
函数名:gettimeofday
功能:获取当前的精确系统时间
用法:int gettimeofday(structtimeval * tv,struct timezone *tz);
对应的头文件:sys/time.h
说明:
其参数tv是保存获取时间结果的结果体,参数tz用于保存时区结果:
struct timezone{
inttz_minuteswest; //格林威治时间往西方的时差
inttz_dsttime; //DST时间的修正方式
}
timezone参数若不使用则可设为NULL(如:gettimeofday(tv,NULL)),
struct timeval{
long int tv_sec; //秒数
long int tv_usec; //微妙数
}
使用gettimeofday()函数还需要先定义一下struct timeval的变量,
而使用gettimeofday()获得的时间的精度会精确到微妙(1e-6s)量级。
其值为从CUT(CoordinatedUniversal Time)时间(即1970年1月1日00:00:00,也就是UNIX系统的Epoch时间)到当前时刻的秒数,其也与time一样存在着2038年的问题。
但它是适用于Linux系统的,在windows下面使用比较麻烦,而windows也存在这类似功能的函数。
2、GetLocalTime
函数名:GetLocalTime
功能:获取当前的精确系统时间
用法:voidGetLocalTime(LPSYSTEMTIME lpSystemtime)
对应的头文件:windows.h
说明:
其参数lpSystemtime是指向一个用户自定义包含日期和时间信息的SYSTEMTIME类型的变量,该变量可用于保存函数获取的时间。
typedef struct SYSTEMTIME{
WORD wYear; //年
WORD wMonth; //月
WORD wDayOfWeek; //星期,0为星期日,1为星期一,2为星期二……
WORD wDay; //日
WORD wHour; //时
WORD wMinute; //分
WORD wSecond; //秒
WORD wMilliseconds; //毫秒
}SYSTEMTIME,*PSYSTEMTIME;
一般将GetLocalTime转化为gettimeofday来提高程序在windows和Linux的通用性。
#include
3、GetTickCount函数
函数名:GetTickCount
功能:获取当前的精确系统时间
用法:DWROD GetTickCount(void)
对应的头文件:windows.h
说明:
其返回了从操作系统启动所经过的毫秒数,其返回值为32位的双字类型DWROD。
# include
可以发现GetTickCount()虽说是能返回毫秒级的精度,但因为计算机的一些原因,其精度一般保存在18ms左右。
所以在srand()初始化rand()的初始种子时,尽量在循环外面,而不是里面。
此外,时间函数可以用来指定延迟时间的长短,
void delay(int n)
{
int time_first = 0;
int time_end = 0;
time_first = (int)(GetTickCount());
while (1){
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 10000; j++);
time_end = (int)(GetTickCount());
if (time_end >(time_first + n))
break;
}
}
本文链接:https://my.lmcjl.com/post/10929.html
4 评论