数据类型 clock_t
关于该数据类型的定义如下:
1 2 3 4 | #ifndef _CLOCK_T_DEFINED typedef long clock_t; #define _CLOCK_T_DEFINED #endif |
在
1 | #define CLOCKS_PER_SEC ((clock_t)1000) |
需要注意:在Linux系统下,CLOCKS_PER_SEC的值可能有所不同,使用Linux打印出来的值是1000000,表示的是微秒。
计时函数 clock()
clock()是C/C++中的计时函数,而与之相关的数据类型是clock_t。clock函数的定义为:
1 | clock_t clock(void); |
计算进程的运算时间
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。
所以,可以使用公式
1 2 3 | void elapsed_time() {<!-- --> printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC); } |
也可以使用clock()函数来计算你的机器运行一个循环或者处理其他事件到底花了多少时间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> #include <stdlib.h> #include <time.h> int main() {<!-- --> long i = 10000000L; clock_t start, end; double duration; /* 测量一个事件持续的时间*/ printf( "Time to do %ld empty loops is ", i) ; start = clock(); while( i-- ); end = clock(); duration = (double)(end - start) / CLOCKS_PER_SEC; printf( "%f seconds\n", duration); system("pause"); } |
运行结果:
1 | Time to do 10000000 empty loops is 0.012000 seconds |
时钟计时单元的长度为1毫秒,则计时的精度也为1毫秒,那么我们可不可以通把
程序定时暂停
宏
利用clock()函数和for循环可以完成程序的定时暂停:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> #include <time.h> using namespace std; int main() {<!-- --> // ... int b = clock() / CLOCKS_PER_SEC; for(int i=0; i<100; ) {<!-- --> // 完成100秒定时 i = clock() / CLOCKS_PER_SEC; i = i - b; } // ... return 0; } |
参考:百度百科