c语⾔微秒级延迟函数,C语⾔中关于获取时间的函数,包括如
果获取微妙、毫秒级时间...
C语⾔获取时间的相关函数,包括如果获取微妙、毫秒级时间 在写程序的过程中,总是需要,或想去测试⼀段时间运⾏话费的时间,有需要测试秒级的,也许毫秒级的,但是有些更细微的程序我们需要测试其微秒级的时延。分别介绍如下:
1 微秒级的时延
1.1 timeval结构体 timeval结构体定义在time.h中:
struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};
其中,tv_sec为从1970-1-1零点零分到创建struct timeval时的秒数,tv_usec为微秒数。
注意:它是指从1970-1-1 0:0:0 零微秒⾄当前的时间差tv_sec秒
后⾯的零头
。所以,要想获取⼀个操作或⼦程序的运⾏毫秒或微秒级时长,不能简单实⽤前后两个时间采集点的tv_usec相减,否则会出现负值(如timeval_test_0.cpp),⽽应考虑到前后两个时间点的秒差(tv_sec)(见
timeval_test.cpp及其运⾏结果
)。
1.2 与timeval相关的gettimeofday()函数 :
该函数的注解为:
/* Get the current time of day and timezone information,
putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled.
Returns 0 on success, -1 on errors.
NOTE: This form of timezone information is obsolete.c语言中struct
Use the functions and variables declared in instead. */
extern int gettimeofday (struct timeval *__restrict __tv,
__timezone_ptr_t __tz) __THROW __nonnull ((1));
gettimeofday()功能是得到当前时间和时区,分别写到tv和tz中,如果tz为NULL则不向tz写⼊。
1.3 源码与运⾏结果:
timeval_test_0.cpp:
#include
#include
#include
int main()
{
timeval start,end;
double d=23.345;
double k=324.917;
double s;
long dif_sec, dif_usec;
for(int i=0; i<10; i++)
{
gettimeofday(&start, NULL);
for(int j=0; j
{
s += k*j - d*(j+3);
}
gettimeofday(&end, NULL);
dif_sec = end.tv_sec - start.tv_sec;
dif_usec = end.tv_usec - start.tv_usec;
printf("running time for %d loop is %ldsec (%ld us)\n", i, dif_sec, dif_usec); }
return 0;
}运⾏结果为:
timeval_test.cpp:
#include
#include
#include
int main()
{
timeval start,end;
double d=23.345;
double k=324.917;
double s;
long dif_sec, dif_usec;
for(int i=0; i<10; i++)
{
gettimeofday(&start, NULL);
for(int j=0; j
{
s += k*j - d*(j+3);
}
gettimeofday(&end, NULL);
dif_sec = end.tv_sec - start.tv_sec;
dif_usec = end.tv_usec - start.tv_usec;
printf("start.tv_sec=%ld, start.tv_usec=%ld\n", start.tv_sec, start.tv_usec);
printf("end.tv_sec=%ld, end.tv_usec=%ld\n", end.tv_sec, end.tv_usec);
printf("running time for %d loop is %ldsec (%ld us)\n\n", i, dif_sec, dif_sec*1000000+dif_usec);
}
return 0;
}运⾏结果:
2 毫秒级时延
2.1 time_t结构体
time_t实际上是长整数类型,定义为:typedef long time_t; /* time value */
2.2 tm结构体
struct tm
{
int tm_sec; /*代表⽬前秒数,正常范围为0-59,但允许⾄61秒 */
int tm_min; /*代表⽬前分数,范围0-59*/
int tm_hour; /* 从午夜算起的时数,范围为0-23 */
int tm_mday; /* ⽬前⽉份的⽇数,范围01-31 */
int tm_mon; /*代表⽬前⽉份,从⼀⽉算起,范围从0-11 */
int tm_year; /*从1900 年算起⾄今的年数*/
int tm_wday; /* ⼀星期的⽇数,从星期⼀算起,范围为0-6。*/
int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /*⽇光节约时间的旗标DST. [-1/0/1]*/
};
3.3 获取具体时间
没时间写了,具体的以下内容全copy之 wwwblogs/wainiwann/archive/2012/11/28/2792133.html 。原 型:time_t time(time_t * timer)
功 能: 获取当前的系统时间,返回的结果是⼀个time_t类型,其实就是⼀个⼤整数,其值表⽰从CUT(C
oordinated Universal Time)时间1970年1⽉1⽇00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调⽤localtime将time_t所表⽰的CUT时间转换为本地时间(我们是+8区,⽐CUT多8个⼩时)并转成struct tm类型,该类型的各数据成员分别表⽰年⽉⽇时分秒。
程序例1:
time函数获得⽇历时间。⽇历时间,是⽤“从⼀个标准时间点到此时的时间经过的秒数”来表⽰的时间。这个标准时间点对不同的编译器来说会有所不同,但对⼀个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的⽇历时间都通过该标准时间点来衡量,所以可以说⽇历时间是“相对时间”,但是⽆论你在哪⼀个时区,在同⼀时刻对同⼀个标准时间点来说,⽇历时间都是⼀样的。
#include
#include
#include
int main(void)
{
time_t t; t = time(NULL);
printf("The number of seconds since January 1, 1970 is %ld",t);
return 0;
}
⽤time()函数结合其他函数(如:localtime、
gmtime
、
asctime
、
ctime
)可以
获得当前系统时间
或是标准时间。
#include
#include
#include
int main(void)
{
time_t timer;//time_t就是long int 类型
struct tm *tblock;
timer = time(NULL);//这⼀句也可以改成time(&timer);
tblock = localtime(&timer);
printf("Local time is: %s\n",asctime(tblock));
return 0;
}
gmtime()函数
原 型:struct tm *gmtime(long *clock);
功 能:把⽇期和时间转换为格林威治(GMT)时间的函数。将参数timep 所指的time_t 结构中的信息转换成真实世界所使⽤的时间⽇期表⽰⽅法,然后将结果由结构tm返回。
说 明:此函数返回的时间⽇期未经时区转换,⽽是UTC时间。
返回值:返回结构tm代表⽬前UTC 时间
localtime()函数
功 能: 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为⽇历时间 。
说 明:此函数获得的tm结构体的时间,是已经进⾏过时区转化为本地时间。
⽤ 法:
struct tm *localtime(const time_t *clock);
返回值:返回指向tm 结构体的指针.tm结构体是time.h中定义的⽤于分别存储时间的各个量(年⽉⽇等) 的结构体.
程序例1:
#include
#include
#include
int main(void)
{
time_t timer;//time_t就是long int 类型
struct tm *tblock;
timer = time(NULL);
tblock = localtime(&timer);
printf("Local time is: %s\n",asctime(tblock));
return 0;
}
执⾏结果:
Local time is: Mon Feb 16 11:29:26 2009
程序例2:
上⾯的例⼦⽤了asctime函数,下⾯这个例⼦不使⽤这个函数⼀样能获取系统当前时间。 需要注意的是年份加上1900,⽉份加上1。
#include
#include
int main()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论