C++程序运行时间-ZZ
【15.5.25】贴一段实用的代码,linux下跑过。
#include <stdio.h> /* printf */
#include <time.h> /* clock_t, clock, CLOCKS_PER_SEC */
#include <math.h> /* sqrt */
#include <iostream>
using namespace std; int frequency_of_primes (int n) {
int i,j;
int freq=n-;
for (i=; i<=n; ++i) for (j=sqrt(i);j>;--j) if (i%j==) {--freq; break;}
return freq;
} int main ()
{
clock_t t;
int f;
t = clock();
printf ("Calculating...\n");
f = frequency_of_primes ();
printf ("The number of primes lower than 100,000 is: %d\n",f);
t = clock() - t;
printf ("It took me %ld clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
cout<<t<<","<<(float)t/CLOCKS_PER_SEC;
return ;
}
http://www.cnblogs.com/houkai/archive/2013/06/06/3120768.html
http://www.douban.com/note/224133728/
------------------------------------------------------------------------------------
在C++程序的性能分析中,其中重要的一项就是程序的运行时间。虽然程序的运行速度与计算机的配置、计算机的当前状态等有很大关系,但在相对一致的外部环境下,程序运行时间的长短在很大程度上是可以反映程序效率的。
1.一般计时方法
在ctime头文件中,C++提供了计时函数 clock() ,其返回数据类型为 clock_t。
typedef long clock_t;
clock()函数返回从“开启程序进程”到“程序中调用clock()函数”这段时间里,CPU时钟计时单元(clock tick)的数目,在MSDN中称之为挂钟时间(wal-clock)。
在ctime文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒内有多少个CPU时钟计时单元。
通过clock()/CLOCKS_PER_SEC便可以得到进程的运行时间,一般CLOCKS_PER_SEC的值为1000,可见计时精度可达小数点后3位(毫秒级)。
#define CLK_TCK CLOCKS_PER_SEC
计时的简单示例如下

/*
*作者:侯凯
*说明:clock()计时函数
*日期:2013-6-6
*/
#include <ctime> //计时用的头文件
#include <iostream>
using namespace std; int main()
{
long i = 10000000L;
clock_t start, end; start = clock();
while( i-- );//需要计时的程序段
end = clock();
printf("The time was: %f\n", (double)(end - start) / CLK_TCK); system("pause");
return 0;
}

2.精确计时方法
这里精确的含义是计时的精度更高,为了达到更高的计时精度,需要使用精确时间函数QueryPerformanceCounter()和QueryPerformanceFrequency(),它们需要计算机从硬件上支持精确定时器。当然,现在计算机一般都是支持的。
QueryPerformanceCounter()函数返回高精确度计数器的脉冲数目(计时数),QueryPerformanceFrequency()函数提供了高精度计时器的频率值,即每秒脉冲数。
bool QueryPerformanceFrequency (LARGE_INTEGER *lpFrequency);
bool QueryPerformanceCounter (LARGE_INTEGER *lpCount);
其中,数据类型LARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构, 其具体用法根据编译器是否支持64位而定。该类型的定义如下:

typedef union _LARGE_INTEGER
{
struct
{
DWORD LowPart ;// 4字节整型数
LONG HighPart;// 4字节整型数
};
LONGLONG QuadPart ;// 8字节整型数 }LARGE_INTEGER ;

在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。其过程与clock()方法类似,但这里的时钟频率很高,测试电脑上频率的QuadPart值为3118031,其精度原高于clocK()。
为了更好地使用这种计时方式,已将其封装成HpTime类,下载。使用该类,计时程序如下

/*
*作者:侯凯
*说明:HpTime类高精度计时
*日期:2013-6-6
*/
#include "hptime.h"
#include <iostream>
using namespace std; int main()
{
long i = 10000000L;
HpTime hpTime; while( i-- );//要计时的函数段 printf("The time was: %f\n", hpTime.sec());
system("pause");
return 0;
}

C++程序运行时间-ZZ的更多相关文章
- 检测Java程序运行时间的2种方法(高精度的时间[纳秒]与低精度的时间[毫秒])
第一种是以毫秒为单位计算的. 代码如下: long startTime=System.currentTimeMillis(); //获取开始时间 doSomeThing(); //测试的代码段 lon ...
- PAT乙级 1026. 程序运行时间(15)
1026. 程序运行时间(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 要获得一个C语言程序的运行时间, ...
- VC中监测程序运行时间(二)-毫秒级
/* * 微秒级计时器,用来统计程序运行时间 * http://blog.csdn.net/hoya5121/article/details/3778487#comments * //整理 [10/1 ...
- PAT-乙级-1026. 程序运行时间(15)
1026. 程序运行时间(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 要获得一个C语言程序的运行时间, ...
- C#测量程序运行时间及cpu使用时间
转载:http://www.cnblogs.com/yanpeng/archive/2008/10/15/1943369.html 对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理 ...
- java中读取程序运行时间
第一种是以毫秒为单位计算的. Java代码 //伪代码 long startTime=System.currentTimeMillis(); //获取开始时间 doSomeThing(); // ...
- Java计算两个程序运行时间
一.获取系统当前时间 long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTim ...
- 三种计算c#程序运行时间的方法
三种计算c#程序运行时间的方法 第一种: 利用 System.DateTime.Now // example1: System.DateTime.Now method DateTime dt1 = S ...
- 【转】c++ 获取程序运行时间
转自:http://blog.csdn.net/ghevinn/article/details/22800059 DWORD start_time=GetTickCount(); {...} DWOR ...
随机推荐
- WinForm的Chart图形控件
/// <summary>画条形图的方法 /// </summary> /// <param name="arr">条形值数组参数</pa ...
- Git删除和恢复文件
删除文件: 如果你在本地删除了一个文件但是没有提交到版本库,这时你用 $ git status命令会看到提示: 如果需要从版本库中删除该文件,则需要用 $ git rm 和 $ git commit ...
- Delphi导出word
//导出Wordprocedure TFrm_Computing.ExportWord;varwordApp, WordDoc, WrdSelection, wrdtable, wrdtable1, ...
- Ubuntu16.04 静态IP配置
Ubuntu16.04 静态IP配置 修改配置 登录系统后,编辑文件/etc/network/interfaces.原始的内容如下: # This file describes the network ...
- Tomcat与Nginx的整合
Tomcat与Nginx的整合 环境 操作系统:ubuntu 14.04.4 LTS 安装Nginx 有两种方式,一种是使用apt-get命令来安装二进制版本,另外一种是下载源码后自己编译. 二进制安 ...
- C#中加粗label的字体
1. 在C#的代码中想直接加粗label控件的字体, label1.Font.Bold = true;//发现系统会提示Font.Bold是只读属性 如果必须要加粗字体呢,方法如下: 2. 使用Fon ...
- 完美解决ExtJs6上传中文文件名乱码,后端SpringMVC
ExtJs上传中文文件名乱码,观察请求. ExtJs6上传乱码从后台无法解决,因为文件名请求里面就已经乱码了,后台无法解码. 除非请求参数正确没有乱码,后台因为编码设置不一样,可以通过后台处理乱码 这 ...
- Flask & Vue 构建前后端分离的应用
Flask & Vue 构建前后端分离的应用 最近在使用 Flask 制作基于 HTML5 的桌面应用,前面写过<用 Python 构建 web 应用>,借助于完善的 Flask ...
- jqgrid 各种方法参数的使用
现在jqGrid对象 tableObj 一.获取选中的行 selected = tableObj.jqGrid('getGridParam', 'selrow'); if (selected == n ...
- log4j 简单用法
maven添加必要库: <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <gro ...