分享
 
 
 

定义并实现统计代码执行时间的类

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

/// <summary>

/// Copyright (c) 2002, AllAboutProgram BBS.

/// All rights reserved.

///

/// 文件:PerformTime.h

/// 摘要:定义并实现统计代码执行时间的类

/// </summary>

///

/// <remark>

/// 当前版本:1.0

/// 作 者:小刀

/// 完成日期:2002年9月18日

/// </remark>

#ifndef PERFORMTIME_H

#define PERFORMTIME_H

#include <windows.h>

#include <string>

#include <sstream>

/// <summary> 代码执行时间类 </summary>

class CPerformTime

{

public:

/// <summary> 缺省构造函数 </summary>

CPerformTime()

{

m_llStartCount = 0;

m_llEndCount = 0;

m_ldDiffSeconds = 0;

// 高精度运行计数器的频率

m_bSupported = QueryPerformanceFrequency((PLARGE_INTEGER)&m_llFrequency);

if (!m_bSupported)

{

// 不支持高精度运行计数器

std::cout << "QueryPerformance functions are not supported!\n\n";

}

}

/// <summary> 开始统计 </summary>

/// <returns> 开始统计时高精度运行计数器的数值 </returns>

LONGLONG Start()

{

m_ldDiffSeconds = 0;

if (m_bSupported)

{

// 记录高精度运行计数器的数值

QueryPerformanceCounter((PLARGE_INTEGER)&m_llStartCount);

}

else

{

// 不支持高精度运行计数器

std::cout << "QueryPerformance functions are not supported!\n\n";

}

return m_llStartCount;

}

/// <summary> 结束统计 </summary>

/// <returns> 结束统计时高精度运行计数器的数值 </returns>

LONGLONG Finish()

{

long lHours;

long lMinutes;

long double ldSeconds;

std::ostringstream formatstr;

if (m_bSupported)

{

// 记录高精度运行计数器的数值

QueryPerformanceCounter((PLARGE_INTEGER)&m_llEndCount);

// 计算以秒为单位的运行时间

m_ldDiffSeconds = (long double)(m_llEndCount - m_llStartCount) / (long double)m_llFrequency;

// 分离运行时间的时分秒

lHours = m_ldDiffSeconds / 3600;

lMinutes = (m_ldDiffSeconds - lHours * 3600) / 60;

ldSeconds = m_ldDiffSeconds - lHours * 3600 - lMinutes * 60;

// 格式化运行时间字符串

formatstr << lHours << " hours " << lMinutes << " minutes and " << ldSeconds << " seconds";

m_strDiffTime = formatstr.str();

}

else

{

// 不支持高精度运行计数器

std::cout << "QueryPerformance functions are not supported!\n\n";

}

return m_llEndCount;

}

/// <summary> 获得高精度运行计数器的频率 </summary>

/// <returns> 高精度运行计数器的频率(单位:n/s) </returns>

LONGLONG Frequency() const

{

return m_llFrequency;

}

/// <summary> 获得开始统计时高精度运行计数器的数值 </summary>

/// <returns> 开始统计时高精度运行计数器的数值 </returns>

LONGLONG StartCount() const

{

return m_llStartCount;

}

/// <summary> 获得结束统计时高精度运行计数器的数值 </summary>

/// <returns> 结束统计时高精度运行计数器的数值 </returns>

LONGLONG EndCount() const

{

return m_llEndCount;

}

/// <summary> 获得代码运行时间 </summary>

/// <returns> 代码运行时间(单位:s) </returns>

long double DiffSeconds() const

{

return m_ldDiffSeconds;

}

/// <summary> 获得代码运行时间 </summary>

/// <returns> 代码运行时间(字符串格式) </returns>

const std::string& DiffTime() const

{

return m_strDiffTime;

}

private:

BOOL m_bSupported; // 是否支持高精度运行计数器

LONGLONG m_llFrequency; // 高精度运行计数器的频率(单位:n/s)

LONGLONG m_llStartCount; // 开始统计时高精度运行计数器的数值

LONGLONG m_llEndCount; // 结束统计时高精度运行计数器的数值

long double m_ldDiffSeconds; // 代码运行时间(单位:s)

std::string m_strDiffTime; // 字符串格式的代码运行时间

};

#endif //PERFORMTIME_H

示例:

Code:

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

{

CPerformTime pt;

pt.Start();

long ert = 10000;

while (ert--)

;

pt.Finish();

cout << "The frequency of the high-resolution performance counter is " << (long)pt.Frequency() << "/s.\n";

cout << "The diff-count is " << (long)(pt.EndCount() - pt.StartCount()) << ".\n";

cout << "The performance experienced " << pt.DiffTime() << "(total " << pt.DiffSeconds() << "s).\n\n";

return 0;

}

输出:

The frequency of the high-resolution performance counter is 3579545/s.

The diff-count is 434.

The performance experienced 0 hours 0 minutes and 0.000121244 seconds(total 0.000121244s).

精度:

约1/3微秒(3.33e-7秒)甚至更高。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有