请问运行一段c++程序,我如何看这段程序运行所花费的精确时间?
请问运行一段c++程序,我如何看这段程序运行所花费的精确时间? 问题点数:10、回复次数:11Top
1 楼longuby(龙骨)回复于 2005-12-31 12:26:13 得分 1
<time.h>
clock_t start,end;
start = clock();
// 程序
end = clock();
cout<< end - start<<endl;
Top
2 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-12-31 12:29:19 得分 1
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
clock_t start,finish;
start=clock();
int i;
for(i=0;i<10000000;++i)
{
//
}
finish=clock();
cout<<"The time that the program costs is :"<<finish-start<<endl;
system("pause");
return 0;
}
时间精度为毫秒
Top
3 楼cunsh(村少)回复于 2005-12-31 12:39:43 得分 0
xuexi;Top
4 楼sjtuwang(旺旺)回复于 2005-12-31 12:59:02 得分 0
正解!!!Top
5 楼tanq()回复于 2005-12-31 13:45:50 得分 2
上面的做法没一个是正确的!
如果在DOS环境下,这样的做法勉强可以说是正确的,但是在WINDOWS和UNIX等多线程的操作系统下这样的做法就错了,因为没有考虑到线程的切换时间和,当前运行的线程的挂起时间!
正确的做法是调用类似WINDOWS下GETTHREADTIME的函数,在UNIX下调哪个函数不是很清楚,现在正在学习UNIX下的开发 :)Top
6 楼YanHuang82(炎黄)回复于 2005-12-31 14:38:12 得分 0
windows 下可以用 ::GetTickCountTop
7 楼whyglinux(山青水秀)回复于 2005-12-31 17:29:16 得分 1
The clock() function returns an approximation of processor time used by the program.
测量程序使用的时间用clock()是正确的。Top
8 楼tb01412(tb)回复于 2005-12-31 17:56:47 得分 2
呵,用常规方法都计算不出进程所占用的时间
用 ::GetTickCount只能算出当前系统总的心跳数(从启动到当前),用clock();计算出从启动到现在的时间毫秒数,都无法计算出当前进程占用CPU的时间。
在LINUX中,可以用驱动的方式来间接获取,因为在内核态下可以访问到当前进程的状态,包括当前进程在用户态下所占用的CPU时间(以系统滴答数)与内核态下占用的时间,不过用此方法只能精确到HZ级换算后的时间。而且当进程处理时间大于等于两个时间片时,所测时间就不再精确Top
9 楼whatsouta(某疯子)回复于 2005-12-31 17:56:57 得分 0
unix 下:
time 程序 参数
程序结束后,time命令会给出三个值:
如:time echo "abc"
real 0m0.00s
user 0m0.00s
sys 0m0.00s
Top
10 楼WilliamJ(威廉J)回复于 2005-12-31 18:05:27 得分 0
使用Boost中的Timer库,使用很简单,先声明一个对象:Boost::timer t1;
然后用 t1.restart(); 将时间归 0,然后写你自己的代码,最后调用t1.elapsed() 返回你的代码的执行时间!你可以这样将时间输出来 cout<<t1.elapsed()<<endl;
Top
11 楼whyglinux(山青水秀)回复于 2005-12-31 18:18:21 得分 3
>> 用常规方法都计算不出进程所占用的时间
测量进程(程序)或者其中的一部分代码执行所需要的时间是一个经常用到的操作。如果常规方法都不行的话,那简直是不可想像的。
>> 用clock();计算出从启动到现在的时间毫秒数,都无法计算出当前进程占用CPU的时间。
clock()计算的就是程序使用的 processor time。
Boost中的Timer其实就是使用的 clock()。Top




