C++程序运行时间测定

From:http://www.cnblogs.com/killerlegend/p/3877703.html

Author:KillerLegend

Date:2014.7.30

此处程序的测试时间精确到毫秒级别,第一种方式是在程序中测定,第二种是编写一个专门用于测试程序运行时间的命令行程序.下面分别介绍:

程序中测定

主要用到的头文件有time.h,主要使用的是其中的一个clock函数,例程如下:

 

 1 #include <iostream>
 2 
 3 #include <time.h>
 4 
 5 usingnamespace std;
 6 
 7 int main()
 8 
 9 {
10 
11     clock_t start = clock();
12 
13     // Place your codes here...
14 
15     clock_t ends = clock();
16 
17     cout <<"Running Time : "<<(double)(ends - start)/ CLOCKS_PER_SEC << endl;
18 
19     return0;
20 
21 }

 

程序很简单,输出的结果秒数,如果将结果乘以1000则输出的为毫秒数.

命令行程序测定

首先说一下命令行参数,完整的main函数声明如下:

1 int main (int argc,char*argv[])

 

其中第一个参数argc代表argument count,也就是参数的个数,应用程序本身也算一个参数,第二个参数argv表示一系列字符串,分别对应于第一个,第二个...参数.第一个参数argv[0]是程序本身的名字,argv[argc]是一个空指针.现在我们就可以自己编写一个简单的计时器程序了,程序如下,名字就叫做timer.cpp:

 1 #include <iostream>
 2 
 3 #include <stdlib.h>
 4 
 5 #include <time.h>
 6 
 7  
 8 
 9 usingnamespace std;
10 
11 int main(int argc,char** argv)//char** argv<==>char* agrv[]
12 
13 {
14 
15     if(argc!=2)
16 
17     {
18 
19         cout<<"Usage:timer program_examed_name"<<endl;
20 
21         return1;
22 
23     }
24 
25  
26 
27     cout<<"Beginning test..."<<endl;
28 
29     clock_t begin = clock();
30 
31     system(argv[1]);
32 
33     clock_t end = clock();
34 
35  
36 
37     cout<<"Running time: "<<(double)(end-begin)/CLOCKS_PER_SEC*1000<<"ms"<<endl;
38 
39 }

 

 

其中的if语句用于判断参数的个数,如果不对,则中断程序.用到的system包含于stdlib.h头文件横纵,因此不要忘记包含这个文件.此命令用于执行我们编译好的程序.下面来具体说一下步骤:

1:首先将timer.cpp编译,生成一个timer.exe可执行程序.

2:我们的程序,假设为main.cpp,如果我们要从外界读取数据并且输出数据,我们需要使用freopen函数(包含在stdio.h中)来让程序执行的时候自动读取输出,看起来就像这样子:

 1 #include <cstdio>
 2 
 3 //...other headers
 4 
 5 int main()
 6 
 7 {
 8 
 9     freopen("data.in","r",stdin);
10 
11     freopen("data.out","w",stdout);
12 
13     //your code...
14 
15     return0;
16 
17 }

 

其中,data.in和data.out自己随便起名都可以,保证和原程序在同一个目录下就行.

编译程序完成后, 生成一个main.exe程序,然后将所需要的数据放到data.in中,打开命令行,转到我们的程序所在的位置(包含有main.exe以及timer.exe),然后在命令行中输入:

1 timer main

 

看起来就像下面这样:

 

时间是74ms.

你当然可以多测试几次,取一个平均值.

 

希望对你有用.

 

 

posted @ 2014-07-30 12:09  KillerLegend  Views(19891)  Comments(0Edit  收藏  举报