精确计算代码运行时间

QueryPerformanceFrequency()

头文件:Windows.h
作用:返回硬件支持的高精度计数器的频率。
返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败。

此函数要求计算机要从硬件上支持高精度定时器。
函数原型:

//返回计算机内部计时器的时钟频率
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
//返回程序运行至此的记数
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);

在用此函数时,先通过QueryPerformanceFrequency()求出时钟频率来初始化,判断计算机是否支持此函数。通过程序运行前后的QueryPerformanceCounter()之差,再除去时钟频率来计算程序运行时间。

用C++把函数封装:

//ConputeTime.h
#pragma once

#include <iostream>

#ifndef ComputeTime_h
#define ComputeTime_h

class   ComputeTime
{
private:
    int Initialized;
    __int64 Frequency;
    __int64 BeginTime;

public:

    bool Avaliable();
    double End();
    bool Begin();
    ComputeTime();
    virtual   ~ComputeTime();

};

#endif
//ComputeTime.cpp
#include "ComputeTime.h"
#include <iostream>
#include <Windows.h>   //QueryPerformanceFrequency函数需要Windows头文件

ComputeTime::ComputeTime()
{
    Initialized = QueryPerformanceFrequency((LARGE_INTEGER   *)&Frequency);  //LARGE_INTEGER是64位的有符号整数
}

ComputeTime::~ComputeTime()
{

}

bool   ComputeTime::Begin()
{
    if (!Initialized)
        return 0;

    return   QueryPerformanceCounter((LARGE_INTEGER   *)&BeginTime);
}

double   ComputeTime::End()
{
    if (!Initialized)
        return 0;

    __int64   endtime;

    QueryPerformanceCounter((LARGE_INTEGER   *)&endtime);

    __int64   elapsed = endtime - BeginTime;

    return   ((double)elapsed / (double)Frequency)*1000.0;  //单位由秒变为毫秒
}

bool   ComputeTime::Avaliable()
{
    return Initialized;
}

可以看出测试时间很精确(单位毫秒)
这里写图片描述

注:代码来自论文Grabcut in One Cut的实现代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值