vc++中如何测试程序的运行时间

vc++中如何测试程序的运行时间,第1张

基本的原理是在执行待测函数之前读取CPU的计数器,执行待测函数之后,再读取一遍,两个计数器之差,再除以CPU主频,就是待测函数执行所用时间。测试精度与CPU主频有关,一般可以精确到微秒量级。

读取CPU计数器的函数:QueryPerformanceCounter()

获取CPU计数器的函数:QueryPerformanceFrequency()

具体 *** 作示范:

首先定义一下所需变量:

LARGE_INTEGER litmp;

LONGLONG QPart1,QPart2;

double dfMinus, dfFreq, dfTim;

在待测函数之前加入:

QueryPerformanceFrequency(&litmp);

dfFreq = (double)litmpQuadPart;// 获得计数器的时钟频率

QueryPerformanceCounter(&litmp);

QPart1 = litmpQuadPart;// 获得初始值

在待测函数加入:

QueryPerformanceCounter(&litmp);

QPart2 = litmpQuadPart;//获得中止值

dfMinus = (double)(QPart2-QPart1);

dfTim = (dfMinus1000) / dfFreq;// 获得对应的时间值,单位为为毫秒

dfTim就是待测函数执行所需的时间了。

用“time_t”来转,把毫秒数除以1000,然后用time_t来强制转换成t_count,再用asctime(localtime(&t_count)),或者你直接用除尘来算。

1、使用CTime类

#include "afxh"

void main()

{

    CString str; //获取系统时间

    CTime tm;

    tm=CTime::GetCurrentTime();   

    str=tmFormat("现在时间是%Y年%m月%d日%X");

    MessageBox(NULL,str,NULL,MB_OK);

}

解析:

    CTime,CString共同用的头文件为“afxh”,

    CTime类可以提取系统的当前时间函数GetCurrentTime(),并且可以通过Format方法转换成CString,如下例

    CTime tmSCan = CTime::GetCurrentTime();

    CString szTime = tmScanFormat("'%Y-%m-%d %H:%M:%S'");

2、得到系统时间日期(使用GetLocalTime)

#include "afxh"

void main()

{

    SYSTEMTIME st;   

    CString strDate,strTime;   

    GetLocalTime(&st);   

    strDateFormat("M----",stwYear,stwMonth,stwDay);   

    strTimeFormat("-:-:-",stwHour,stwMinute,stwSecond);

    printf("%s\n",strDate);

    printf("%s\n",strTime);

}

解析:

    利用GetLocalTime函数,获取系统当前时间,并将获得的值放在SYSTEMTIME结构中,

    同样的也可以使用Format方法,不过这里使用的是CString类的Format方法

    SYSTEMTIME   st;

    GetLocalTime(&st);

    CString   time;

    timeFormat( "M-d-d     d:d:d ",   stwYear);

3、使用GetTickCount//获取系统运行时间,也可以实现对程序的运行时间的计算

#include "afxh"

#include "afxwinh"

void main()

{

    CString str,str1;

//     long t1=GetTickCount();//程序段开始前取得系统运行时间(ms)   

//     Sleep(500);     

//     long t2=GetTickCount();//程序段结束后取得系统运行时间(ms)    

//     strFormat("time:%dms",t2-t1);//前后之差即 程序运行时间   

//     AfxMessageBox(str);

   

    long t=GetTickCount(); //获取系统当前时间      

    str1Format("系统已运行 %d时",t/3600000);   

    str=str1;    

    t%=3600000;   

    str1Format("%d分",t/60000);   

    str+=str1;   

    t%=60000;   

    str1Format("%d秒",t/1000);

    str+=str1;

    AfxMessageBox(str);

}

解析:GetTickCount函数可以获取系统运行的时间,利用其差值可以获取程序的运行时间

用COleDateTimeSpan来获得两个数据之间的差;

COleDateTimeSpan::m_span是时间差值。

一天时间的数值差是10;

一毫秒的话应该是值的差距是 (double)1/(1000360024);

#include <stdioh>

#include <sys/timeh>

long getCurrentTime()

{

struct timeval tv;

gettimeofday(&tv,NULL);

return tvtv_sec 1000 + tvtv_usec / 1000;

}

int main()

{

printf("c/c++ program:%ld\n",getCurrentTime());

return 0;

}

这个就是当前的毫秒值。至于你什么时候取,就看你自己了。

你说的这种情况,你可以在main的时候读取一个初值,然后再后续读取出来的值减去前面这个初值就ok了。

加上头文件timeh

调用函数time() 以及localtime() 函数

以下是例子:

#include <stdioh>

#include <timeh>

int main()

{

time_t nowtime;

time( &nowtime ); //获取时间

struct tm timeinfo; //定义时间结构体

timeinfo = localtime( &nowtime ); //转化为当地时间

int year, month, day, hour, min, sec;

year = timeinfo->tm_year + 1900; //从1900年开始计数,所以+1900

month = timeinfo->tm_mon + 1; //从0开始计数,所以+1

day = timeinfo->tm_mday;

hour = timeinfo->tm_hour;

min = timeinfo->tm_min;

sec = timeinfo->tm_sec;

printf("%d %d %d %d:%d:%d\n", year, month, day, hour, min, sec);

return 0;

}

希望对你有帮助!!!

以上就是关于vc++中如何测试程序的运行时间全部的内容,包括:vc++中如何测试程序的运行时间、vc如何将毫秒转换为日期、VC++ MFC编程,如何获取当前系统时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9764472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存