问题:在实际工作中,需要计算某一个程序中代码片段的执行时间,从而判断这部分代码放在驱动层处理更高效还是放在用户层处理更合适。
策略:这里用到的结构体是timeval,通过函数gettimeofday()来获取代码片段起始时间值,从而计算片段执行时间;
代码如下:
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#define START_TIME \
struct timeval time1, time2; \
int startSec = gettimeofday(&time1, NULL);
#define END_TIME \
int endSec = gettimeofday(&time2, NULL); \
double runTime = (time2.tv_sec - time1.tv_sec) * 1000. + \
(time2.tv_usec - time1.tv_usec) / 1000.; \
printf("process between START_TIME and END_TIME is runTime = %4.2f(ms)\n", runTime);
int main()
{
printf("main enter.\n");
START_TIME
sleep(2);
END_TIME
printf("main out.\n");
return 0;
}
程序运行结果:
main enter.
process between START_TIME and END_TIME is runTime = 2000.26(ms)
main out.
尽管代码片段中只有sleep(2)一个语句,由于END_TIME执行过程也要有时间消耗,所以最终计算的结果大于2000ms。