1、函数名:
settime
功
能:
设置系统时间
原型:void
settime
2、例程:
#include <stdioh>
#include <dosh>
int main(void)
{
struct time t;
gettime(&t);
printf("The current minute is: %d\n", tti_min);
printf("The current hour is: %d\n", tti_hour);
printf("The current hundredth of a second is: %d\n", tti_hund);
printf("The current second is: %d\n", tti_sec);
/ Add one to the minutes struct element and then call settime /
tti_min++;
settime(&t); //设置系统时间
return 0;
}
clock()函数:
clock()是c/c++中的计时函数,而与其相关的数据类型是clock_t。在msdn中,查得对clock函数定义如下:
clock_t
clock(void)
;
这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的cpu时钟计时单元(clock
tick)数,在msdn中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型,在timeh文件中,我们可以找到对它的定义:
#ifndef
_clock_t_defined
typedef
long
clock_t;
#define
_clock_t_defined
#endif
很明显,clock_t是一个长整形数。在timeh文件中,还定义了一个常量clocks_per_sec,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
#define
clocks_per_sec
((clock_t)1000)
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,你可以使用公式clock()/clocks_per_sec来计算一个进程自身的运行时间:
void
elapsed_time()
{
printf("elapsed
time:%u
secs\n",clock()/clocks_per_sec);
}
当然,你也可以用clock函数来计算你的机器运行一个循环或者处理其它事件到底花了多少时间:
#include
#include
#include
int
main(void)
{
long
i
=
10000000l;
clock_t
start,
finish;
double
duration;
/
测量一个事件持续的时间/
printf(
"time
to
do
%ld
empty
loops
is
",
i)
;
start
=
clock();
while(
i--
);
finish
=
clock();
duration
=
(double)(finish
-
start)
/
clocks_per_sec;
printf(
"%f
seconds\n",
duration
);
system("pause");
}
在笔者的机器上,运行结果如下:
time
to
do
10000000
empty
loops
is
003000
seconds
上面我们看到时钟计时单元的长度为1毫秒,那么计时的精度也为1毫秒,那么我们可不可以通过改变clocks_per_sec的定义,通过把它定义的大一些,从而使计时精度更高呢?通过尝试,你会发现这样是不行的。在标准c/c++中,最小的计时单位是一毫秒。
time_t
time(
time_t
timer
);
返回值是1970年到现在的秒数
用long型接就可以了
参数也是同样意义
如
long
time_s
=
0;
time_s
=
time(
null
);
//
time_s就是1970年到现在的秒数
或者
long
time_s
=
null;
time(time_s);
//
time_s就是1970年到现在的秒数
要计算前后一段时间的话之前取一次time,之后取一次相减就知道用了多少秒了
C语言中提供了许多库函数来实现计时功能
下面介绍一些常用的计时函数
1 time()
头文件:timeh
函数原型: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 clock()
头文件:timeh
函数原型:clock_t clock(void);
功能:该函数返回值是硬件滴答数,要换算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++60下,这两个量的值都是1000。
说明:可以精确到毫秒,适合一般场合的使用。
3 timeGetTime()
头文件:Mmsystemh 引用库: Winmmlib
函数原型:DWORD timeGetTime(VOID);
功能:返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约4971天。
说明:该函数的时间精度是五毫秒或更大一些,这取决于机器的性能。可用timeBeginPeriod和timeEndPeriod函数提高timeGetTime函数的精度。如果使用了,连续调用timeGetTime函数,一系列返回值的差异由timeBeginPeriod和timeEndPeriod决定。
4 GetTickCount()
头文件:windowsh
函数原型:DWORD WINAPI GetTickCount(void);
功能:返回自设备启动后的毫秒数(不含系统暂停时间)。
说明:精确到毫秒。对于一般的实时控制,使用GetTickCount()函数就可以满足精度要求。
5 QueryPerformanceCounter()、QueryPerformanceFrequency()
头文件:windowsh
函数原型:BOOLQueryPerformanceCounter(LARGE_INTEGER lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER lpFrequency);
功能:前者获得的是CPU从开机以来执行的时钟周期数。后者用于获得你的机器一秒钟执行多少次,就是你的时钟周期。
补充:LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定:
在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。
说明:这种方法的定时误差不超过1微秒,精度与CPU等机器配置有关,一般认为精度为透微秒级。在Windows平台下进行高精度计时的时候可以考虑这种方法。
6 gettimeofday()
Linux C函数。
头文件:sys/timeh
函数原型:int gettimeofday(struct timeval tv,struct timezone tz);
说明:其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果(若不使用则传入NULL即可)。
timeval的定义为:
struct timeval {
long tv_sec; // 秒数
long tv_usec; //微秒数
}
可见该函数可用于在linux中获得微秒精度的时间。
说明:使用这种方式计时,精度可达微秒。经验证,在arm+linux的环境下此函数仍可使用。
使用C语言编写程序需要获得当前精确时间(1970年1月1日到现在的时间),或者为执行计时,可以使用gettimeofday()函数。
用 法: void gettime(struct time timep);
C语言函数
#include <sys/timeh>
int gettimeofday(struct timevaltv, struct timezone tz);
其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:
struct timezone{
int tz_minuteswest;/格林威治时间往西方的时差/
int tz_dsttime;/DST 时间的修正方式/
}
timezone 参数若不使用则传入NULL即可。
而结构体timeval的定义为:
struct timeval{
long int tv_sec; // 秒数
long int tv_usec; // 微秒数
}
它获得的时间精确到微秒(1e-6 s)量级。在一段代码前后分别使用gettimeofday可以计算代码执行时间:
struct timeval tv_begin, tv_end;
gettimeofday(&tv_begin, NULL);
foo();
gettimeofday(&tv_end, NULL);
timeh头文件提供对时间 *** 作的一些函数,clock()是程序开始到调用的毫秒数。
time_tt_begin,t_end;
t_begin=clock();//记录开始时间
dosomething();//调用函数
t_end=clock();//记录结束时间
printf("Timeused=%21f\n",(double)(t_end-t_begin)/CLOCKS_PER_SEC);//显示函数调用时间
扩展资料
c语言中timeh头文件的使用
#include<stdioh>
#include<stdlibh>
#include<timeh>
intmain(void)
{
longi=10000000L;
clock_tstart,finish;
doubleduration;//测量一个事件持续的时间
printf("Timetodo%ldemptyloopsis",i);
start=clock();
while(i--)
finish=clock();
duration=(double)(finish-start)/CLOCKS_PER_SEC;//clock()是以毫秒为单位计算时间的所以除以CLOCKS_PER_SEC这是timeh里面定义的一个常量
printf("%fseconds\n",duration);
system("pause");
}
这要用到的是rand()函数, srand()函数,和time()函数。
需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlibh;而使用time()函数需要引入ctime头文件。
srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。
使用rand()函数获取一个随机数
如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlibh, 其值为2147483647。
#include<stdio>
#include<timeh>
int main()
{
for(int i=0;i<10;i++)
{
//产生10以内的整数
printf(" rand()%10\n")
}
}
c语言时间函数:
1、获得日历时间函数:
可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t timer);
如果已经声明了参数timer,可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:
2、获得日期和时间函数:
这里说的日期和时间就是平时所说的年、月、日、时、分、秒等信息。从第2节我们已经知道这些信息都保存在一个名为tm的结构体中,那么如何将一个日历时间保存为一个tm结构的对象呢?
其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:
struct tm gmtime(const time_t timer);
struct tm localtime(const time_t timer);
其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时,即2005年7月30日15点18分20秒。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)