- 论坛徽章:
- 0
|
在论坛精华里面找到一个得到程序执行时间的例子,运行通过,但是我想把它改成一个函数,方便调用。
直接写在程序主体中,可用
- int main(int argc, char *argv[])
- {
- struct timeval tpstart,tpend;
- long iTimeInterval
- gettimeofday(&tpstart,NULL);
- fileIORW(argv[1],atoi(argv[2])); //一个测试文件IO读取的函数
- gettimeofday(&tpend,NULL);
- iTimeInterval=1000000 * (tpend.tv_sec - tpstart.tv_sec);
- iTimeInterval += tpend.tv_usec - tpstart.tv_usec;
- printf("used time: %d milliseconde\n",iTimeInterval);
- return 0;
- }
复制代码
写成函数
- /*当第一次运行函数前时,先赋值*inow为0,
- 运行结束后,inow应得到运行时的时间值,返回值为nowtime.tv_sec-(*inow),也就是与上次的inow比较的结果
- 第二次运行前,inow已经为上一次得到的时间值,
- 运行后,返回值应该为本次时间值与上一次时间值的差值才对,可惜结果不如我所料
- */
-
- int rd_run_time(long *inow){
- struct timeval nowtime;
- long sptime;
- bzero(&nowtime,sizeof(nowtime));
- gettimeofday(&nowtime,NULL);
- sptime=nowtime.tv_sec-(*inow);
- *inow=nowtime.tv_sec;
- return sptime;
- }
- int main(int argc, char *argv[])
- {
- long test1=0;
- printf("test1 run:%d\n",rd_run_time(&test1));
- fileIORW(argv[1],atoi(argv[2]));
- printf("test1 run:%d\n",rd_run_time(&test1));
- return 0;
- }
复制代码
结果,第一次函数调用后得到的rd_run_time返回结果是开始时的时间值没有错,但运行fileIORW函数后的第二次对d_run_time得到的消耗时间总是0。
跟踪函数rd_run_time,发现其中前后两次调用中nowtime.tv_sec的值居然是一样的!但是用gettimeofday(&nowtime,NULL); 不是应该得到当时的时间值吗?而用gdb跟踪,发现似乎又可以得到正确的值,真是奇怪。
我以前一直是用pascal的,因为要做linux下的作业,才开始使用C不久,不知道是我的程序的错误,还是linux的gcc在编译时的优化造成的问题呢?
请高手指点. |
|