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(目标时钟() )
;
}
最后更新于 2023-10-07 22:50:23 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章