宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

目前有各种定时功能。一般我们先调用定时函数,记下当前时间tstart,然后处理一个程序,再调用定时函数,记下处理的时间tend,然后在tend和tstart之间做一个差值,得到程序的执行时间。然而,各种定时功能的精度是不同的。在这里,我们将对各种计时功能做一些简单的记录。

Void foo()方法1,time()获取当前系统时间,返回的结果是time_t类型,实际上是一个大整数,它的值表示从1970年1月1日的CUT(协调世界时)时间,00:0:00(称为UNIX系统的Epoch时间)到当前时间的秒数。

Void test1()方法二,clock()函数返回从“启动此程序进程”到“在程序中调用clock()函数”的CPU时钟滴答数,在MSDN称为挂钟时间(wal-clock)常量CLOCKS_PER_SEC,用来表示一秒钟内会有多少个时钟滴答。

Void test2()方法3,timeGetTime()函数系统时间以毫秒为单位。这个时间是系统开启后经过的时间,是windows api。

Void test3()如果你想让学校C/C来这个组,第一个是330,中间是859,最后是766,里面有很多学习资料。

4.方法,QueryPerformanceCounter()返回高精度性能计数器的值,该值可以以细微的单位计时。但是,queryperformancecounter()精确定时的最小单位与系统有关,因此,您必须查询系统才能获得QueryPerformanceCounter()返回的点击频率。QueryPerformanceFrequency()提供此频率值,并返回每秒的点击次数。

Void test4()方法5,GetTickCount返回(检索)从操作系统启动到现在经过的毫秒数,其返回值为DWORD。

Void test5()方法6,RDTSC指令,在英特尔奔腾或更高版本的CPU中,有一个名为“时间戳”的组件,它以64位无符号整数的格式记录自CPU通电以来经过的时钟周期数。因为目前的CPU频率很高,这个组件可以达到纳秒级的计时精度。这种准确性是上述方法无法比拟的。在奔腾以上的中央处理器中,提供了一个机器指令RDTSC(读取时间戳计数器)来读取该时间戳的编号,并将其保存在EDX:EAX寄存器对中。因为EDX:EAX寄存器对恰好是Win32平台下C语言中保存函数返回值的寄存器,所以我们可以把这条指令看作是一个普通的函数调用。因为C的嵌入式汇编器不直接支持RDTSC,所以我们需要用_emit伪指令直接嵌入这条指令的机器码形式0X0F和0X31。

内联无符号_ _ int64getcyclecount()方法7。gettime of day () Linux环境中的Timer函数,int gettime of day(structtimeval * tv,structtimezone * tz),gettime of day()将以TV指示的结构返回当前时间,本地时区的信息将放入tz指示的结构中。

//timeval结构定义为:struct timeval { long tv _ sec/* second */long TV _ usec;/*微秒*/};//timezone结构定义为: struct time zone { int tz _ minutes west;/*格林威治时间和*/int tz_dsttime的差值是多少分钟;/*夏令时的状态*/};Void test7()方法8,在linux环境下,使用RDTSC指令来计时。它与方法6相同,但在Linux实现中略有不同。

# IF Defined(_ _ _ i386 _ _)Static _ _ inline _ _ _无符号长getcyclicount(void)总结,方法1、2、7、8可以在linux环境下执行,方法1、2、3、4、5、6可以在windows环境下执行。其中,timeGetTime()和GetTickCount()的返回值均为DWORD,当统计量过大时,结果会返回0,影响统计结果。

测试结果表明,在windows环境下,主频在秒内为1.6GHz。

1使用时间:0

2使用时间:0.39万

3使用时间:0.388000

4使用时间:0.394704

5使用时间:0.407000

6使用时间:0.398684