C/C++获取程序执行时间的五个方法对比
2016-01-10 22:48
411 查看
五种获取C/C++程序执行时间的方法对比如下:
核心函数 头文件 函数库 精度 准确度
QueryPerformanceCounter windows.h API us 非常准确
GetTickTount windows.h API ms 准确
clock time.h C函数 ms 较准确
time time.h C函数 s 很准确
ftime sys/timeb.h C函数 ms 较准确
在windows平台下建议使用GetTickCount,当对精度和准确度要求高可以用QueryPerformanceCounter,Linux平台下建议使用ftime,本程序均在windows平台下运行,五种获取程序执行时间的代码如下:
核心函数 头文件 函数库 精度 准确度
QueryPerformanceCounter windows.h API us 非常准确
GetTickTount windows.h API ms 准确
clock time.h C函数 ms 较准确
time time.h C函数 s 很准确
ftime sys/timeb.h C函数 ms 较准确
在windows平台下建议使用GetTickCount,当对精度和准确度要求高可以用QueryPerformanceCounter,Linux平台下建议使用ftime,本程序均在windows平台下运行,五种获取程序执行时间的代码如下:
#include <iostream> #include <fstream> #include <ctime> #include <windows.h> #include <tchar.h> #include <sys/timeb.h> #include <time.h> #include <cmath> #include <stdio.h> using namespace std; /**************************获取系统时间*************************/ void MyGetSystemTime() { SYSTEMTIME currentTime; GetSystemTime(¤tTime); printf("time: %u/%u/%u %u:%u:%u:%u %d\n", currentTime.wYear,currentTime.wMonth,currentTime.wDay, currentTime.wHour,currentTime.wMinute,currentTime.wSecond, currentTime.wMilliseconds,currentTime.wDayOfWeek); } /****************自己实现的定时器,要比Sleep准确****************/ void MySleep(DWORD dwMilliseconds) { LARGE_INTEGER litmp; LONGLONG QPart1; QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart;//获得初始值 LONGLONG QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart;//获得计数器的时钟频率 do { QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart;//获得中止值 dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq * 1000;//获得对应的时间值,单位为毫秒 }while(dfTim < dwMilliseconds); } int main() { /**************QueryPerformanceCounter(),windows.h,API,us****************///精度最高 LARGE_INTEGER nFreq; LARGE_INTEGER nBeginTime; LARGE_INTEGER nEndTime; double time; QueryPerformanceFrequency(&nFreq); QueryPerformanceCounter(&nBeginTime); Sleep(1000); QueryPerformanceCounter(&nEndTime); time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)/(double)nFreq.QuadPart; printf("%f\n",time); /**************GetTickCount(),windows.h,API,ms****************///首选 DWORD start, end; start = GetTickCount(); MySleep(1000); end = GetTickCount(); printf("time: %d ms\n", end - start); /**************clock(),time.h,C函数,ms,不太准****************/ clock_t start, end; start = clock(); Sleep(1000); end = clock(); printf("time: %d ms\n", end - start); /**************time(),time.h,C函数,s****************/ time_t start, end; start = time(NULL); Sleep(1000); end = time(NULL); printf("time: %d ms\n", end - start); /**************ftime(),sys/timeb.h,C函数,ms,不太准****************/ struct timeb startTime , endTime; ftime(&startTime); Sleep(1000); ftime(&endTime); printf("time: %d ms\n", (endTime.time-startTime.time)*1000 + (endTime.millitm - startTime.millitm)); return 0; }
相关文章推荐
- 哈弗曼树讲解---c语言实现
- c语言 c99 标准
- C++学习笔记42——重载操作符之箭头操作符
- POJ 1003 Hangover 水题一道 练习C++编程
- C++编程学习之旅 由浅及深
- 实型常量
- 【C/C++学院】0831-类与对象的异常/面试100题1-100
- C++实现链表基本操作
- C语言快速删除列表选中项算法
- C++中的关键知识点(汇总)
- JAVA使用JNI 调用 C++ DLL 动态连接库从零开始 一
- Sicily 2005. Lovely Number
- c++拾遗-----处理数据
- C语言 关键字、标识符、注释
- 大话设计模式 第二章 策略模式 C++实现
- python解析C语言结果
- C语言 第一个C语言程序
- C语言 typedef的使用
- 大话设计模式 第一章 简单工厂模式 C++实现
- C#调用中捕获C++异常的方法