Clocktc语言

在C语言中,经常需要定时触发事件,这就涉及到获取系统时间。有许多类型的结构。Unix/Linux系统下有以下时间结构:

1.time_t类型:长整数,一般用来表示自1970-001 00: 00以来的秒数。精度:秒;由函数time()获得;

该类型在头文件/usr/include/sys/time.h中定义:

#定义时间

typedef long time _ t;

#endif

函数定义:time _ t time(time _ t * LPT);

如:time _ t time = time(null);

2.struct timeb结构:它有两个主要成员,一个是秒,一个是毫秒;精度:毫秒(10E-3秒);

通过函数ftime()获取struct timeb结构的时间;其定义如下:

结构时间b

{

time_t时间;

无符号短millitm

短时区;

短dstflag

};

#包含系统/时间b.h

int ftime(struct time b * TP);

调用成功返回0;调用失败,返回-1;

3.struct timeval结构,它有两个成员;一个是秒,一个是微秒。精度:微秒(10e-6);

由函数gettime0fday()获得;

结构Timeval结构定义为:

结构时间间隔

{

长tv _ sec

long tv _ usec

}

读取struct timeval结构数据的功能描述:

#包含系统/时间. h

int gettimeofday(struct time val * TV,struct time zone * tz);

这个函数会提取系统的当前时间,并将时间分为秒和微秒两部分,填入结构体struct timeval中;同时,发送当地时区信函

信息被填入结构struct timezone

返回值:0表示成功,-1表示失败,错误代码存储在errno中。补充说明:默认指针tv和tz指向的内存空间超过了内存。

获得许可。

结构时区结构定义如下:

结构时区

{

int tz _ minuteswest

int tz _ dsttime

}

上述两种结构都在/usr/include/sys/time.h中定义。tz_dsttime表示的状态如下

夏令时_无

美国夏令时

AUST夏令时

夏令时_潮湿

DST_MET

EET夏令时

夏令时_加拿大

夏令时_英国

夏令时_朗姆

DST_TUR

澳大利亚夏令时

4.struct timespec结构:是POSIX.4标准定义的时间结构,精度为纳秒级(10E-9秒);

通过函数gethrestime()或gethrestime_lasttick()获取当前system struct timespec结构的时间;其定义如下:

结构时间规范

{

time _ t tv _ sec

长tv _ nsec

};

typedef struct timespec timespec _ t;

该结构在头文件/usr/include/sys/time_impl.h中定义;

extern void gethrestime(time spec _ t *);

extern void gethrestime _ last tick(time spec _ t *);

5.clock_t类型:由函数clock()获得;

#包含时间. h

clock _ t clock(void);

该函数返回以微秒计的CPU时间;

类型clock_t在头文件/usr/include/sys/types.h中定义:

#ifndef _CLOCK_T

#定义时钟

typedef长时钟_ t;

#endif

6.struct tm结构:用函数gmtime()解析time_t得到。

struct TM * GM time(const time _ t * time p);

函数说明:gmtime()将参数timep指向的time_t结构中的信息转换成现实世界中使用的时间和日期表示方法,然后

结果由结构tm返回。

结构tm定义为

结构商标

{

int tm _ sec

int tm _ min

int tm _ hour

int tm _ mday

int tm _ mon

int tm _ year

int tm _ wday

int tm _ yday

int tm _ isdst

};

Int tm_sec表示当前的秒数。正常范围是0-59,但允许61秒。

Int tm_min表示当前分数,范围从0到59。

Int tm_hour从午夜开始的小时数,范围从0到23。

Int tm_mday当前月份的天数,范围从01到31。

Int tm_mon表示当前月份,从1月开始计数,范围从0到11。

自1900年以来的Int tm_year年

Int tm_wday一周中从星期一开始的天数,范围从0到6。

Int tm_yday今年1月1日以来的天数,范围从0到365。

int tm_isdst夏令时标志

此函数返回的时间和日期是不含时区转换的UTC时间。

返回值:返回表示当前UTC时间的结构tm。

7.Unix对时间单位的定义:

#定义秒1 //秒

#定义毫秒1000 //毫秒

#定义微秒1000000 //微秒

#定义毫微秒1000000000//纳秒

8.时间格式化功能:

size_t strftime(char *str,size_t max,char *fmt,struct TM * TP);Strftime有点像sprintf,其格式由fmt指定。

%a:这一天的名称和缩写。

%A:今天是什么日子,全名?

%b:月份名称,缩写

%B:月份名称,全名

%c:与ctime/asctime格式相同。

%d:本月中某一天的名称,从零开始计数。

%H:一天中的哪个小时,24小时制,从零开始计数?

%I:一天中的哪一小时,12小时制,从零开始计数

%j:一年中的哪一天,从零开始计数

%m:一年中的几月,从零开始计数

%M:现在是几点,从零开始计数?

%p:上午或下午

%S:一分钟中的哪一秒,从零开始计数?

%U:是哪一年,从初一算起。

%W:从第一年算起,是哪一年。

%w:从零开始数,今天是几号?

%x:本地日期

%X:当地时间

%y:两位数的年份

%Y:四位数年份

%Z:时区名称的缩写

%%:%符号

char * strptime(char *s,char *fmt,struct TM * TP);像scanf一样,将字符串解释成tm格式。

%h:与%b和%B相同

%c:读取%x和%X格式

%C:读取%C格式

%e:与%d相同

%D:读取%m/%d/%y格式

%k:与%H相同

%l:与% i相同。

%r:读取“%I:%M:%S %p”格式。

%R:读取“%H:%M”格式

%T:读取“%H:%M:%S”格式。

%y:读取两位数的年份

%Y:读取四位数年份

希望能帮到你,谢谢!

C语言中有计时的函数吗?怎么用? 是的,时钟功能。

Clock()是C/C中的计时函数,其相关数据类型为clock _ t,在MSDN,Chad对时钟函数的定义如下:clock _ t clock(void);# ifndef _ CLOCK _ T _ DEFINED typedef long CLOCK _ T;

#define _CLOCK_T_DEFINED #endif .

可以看到,每千分之一秒(1毫秒),调用clock函数返回的值就加1。

c语言是一种通用的计算机编程语言,应用非常广泛。C语言的设计目标是提供一种能够以简单的方式编译处理低级内存,生成少量机器码,无需任何运行环境支持即可运行的编程语言。

C语言虽然提供了很多底层处理功能,但仍然保持了良好的跨平台特性。用标准规范编写的c语言程序可以在许多计算机平台上编译,甚至包括一些嵌入式处理器和超级计算机。

1967年,剑桥大学的Martin Richards简化了CPL语言,从而产生了BCPL语言。

如何用c语言计时 C语言提供了很多库函数来实现计时功能。

以下是一些常见的计时功能。

1.时间()

头文件:time.h

函数原型:time_t time(time_t * timer)

函数:根据GMT返回从1970年1月1日00:00:00到现在的秒数。

将time()函数与其他函数(如localtime、gmtime、asctime、ctime)结合使用,以获取当前系统时间或标准时间。

difftime函数可用于计算两个time_t类型之间的差异,这可用于计时。使用difftime(t2,t1)比t2-t1更准确,因为C标准没有规定time_t的单位必须是秒,difftime会根据机器进行换算,更可靠。

注意:C标准库中的函数移植性最好,性能稳定,但是精度太低,只精确到秒,对于一般的事件计时是足够的,但是对于运算时间显然不够。

2.时钟()

头文件:time.h

函数原型:clock _ t clock(void);

函数:这个函数的返回值是硬件ticks,需要除以CLK_TCK或者CLK_TCKCLOCKS_PER_SEC才能换算成秒。比如在VC 6.0下,这两个量的值都是1000。

说明:可以精确到毫秒,适用于一般场合。

3.timeGetTime()

头文件:Mmsystem.h参考库:Winmm.lib

函数原型:DWORD time gettime(VOID);

函数:以毫秒为单位返回系统时间。系统时间是从系统启动到函数调用所经过的毫秒数。注意这个值是32位,它会从0到2 ^ 32循环,大约49.71天。

注意:该功能的时间精度为5毫秒或更高,取决于机器的性能。您可以使用timeBeginPeriod和timeEndPeriod函数来提高timeGetTime函数的准确性。如果使用,则连续调用timeGetTime函数,一系列返回值的差值由timeBeginPeriod和timeEndPeriod决定。

4.GetTickCount()

头文件:windows.h

函数原型:DWORD WINAPI GetTickCount(void);

函数:返回设备启动后的毫秒数(不包括系统暂停时间)。

描述:精确到毫秒。对于一般的实时控制,使用GetTickCount()函数可以满足精度要求。

5.QueryPerformanceCounter()、QueryPerformanceFrequency()

头文件:windows.h

函数原型:boolQueryPerformanceCounter(large _ integer * lpPerformanceCount);

BOOLQueryPerformanceFrequency(LARGE _ INTEGER * LP frequency);

功能:前者获取CPU自开机以来执行的时钟周期数。后者用来得到你的机器一秒执行多少次,也就是你的时钟周期。

补充:LARGE_INTEGER可以是8字节整数,也可以是两个4字节整数的组合结构,具体用法取决于编译器是否支持64位:

计时前调用QueryPerformanceFrequency()函数获取机器内部定时器的时钟频率,然后在需要严格计时的事件前后调用QueryPerformanceCounter()函数,利用两次计数的差值和时钟频率计算出事件的准确时间。

注:该方法计时误差小于1微秒,精度与CPU等机器的配置有关。一般认为精度在微秒量级。在Windows平台下进行高精度计时时可以考虑这种方法。

6.gettimeofday()

Linux C函数。

头文件:sys/time.h

函数原型:int gettime of day(struct time val * TV,struct time zone * tz);

注意:参数tv是保存采集时间结果的结构,参数tz用于保存时区结果(如果不使用,传入NULL即可)。

Timeval定义为:

结构时间间隔{

长tv _ sec//秒

long tv _ usec//微秒数

}

可以看出,在linux中使用该函数可以获得微秒级的精确时间。

注意:用这种方法计时,精度可以达到微秒级。经验证,该功能在arm linux环境下仍然可以使用。

C语言中库函数time.h中的变量time_t和clock_t有什么区别?使用上主要有哪些区别? Clock_t是系统定义的结构类型,time_t是系统定义的长整型,也就是long int类型。

两种完全不同的类型。

使用的函数也不同。

如何使用C语言中的时钟函数 /*时钟。丙:

等待3秒钟,并记录程序的开始时间(在“开始”中)

循环60万次做操作。

[a = sqrt(sqrt(16.0));a = sqrt(sqrt(16.0));]

记录程序的运行时间(在完成时)

算出这60万次的运行时间。

*/

#包含stdio.h

#包含stdlib.h

#包含时间. h

#包含数学. h

无效睡眠(clock _ t wait);

无效总管(无效)

{

龙i = 600000L

clock_t开始,结束;

双倍时长;

双a;

/*等待三秒钟*/

printf("延迟3秒\ n ");

sleep((clock _ t)3 * CLOCKS _ PER _ SEC);

printf("搞定!\ n ");

/*测量事件的持续时间。*/

printf("做%ld循环的时间是",I);

start =时钟();

while( i - ) {

a = sqrt(sqrt(16.0));a = sqrt(sqrt(16.0));

}

finish = clock();

duration =(double)(finish-start)/CLOCKS _ PER _ SEC;

printf( "%lf秒\n ",持续时间);

}

/*等待子例程需要多少毫秒*/

无效睡眠(clock_t wait)

{

clock_t目标;

goal =等待时钟();

while(目标时钟() )

}

相关文章

发表新评论