C++统计代码运行时间计时器(转)

转自http://blog.csdn.net/ap1005834/article/details/53419647

一、前言

         这里记下从网上找到的一些自己比较常用的C++计时代码

二、Linux下精确至毫秒

#include <sys/time.h>  

#include <iostream>  

#include <time.h>  

double get_wall_time()  

{  

    struct timeval time ;  

    if (gettimeofday(&time,NULL)){  

        return 0;  

    }  

    return (double)time.tv_sec + (double)time.tv_usec * .000001;  

}  

  

int main()  

{  

    unsigned int t = 0;  

    double start_time = get_wall_time()  

    while(t++<10e+6);  

    double end_time = get_wall_time()  

    std::cout<<"循环耗时为:"<<end_time-start_time<<"ms";  

    return 0;  

}  

三、Windows下精确至毫秒

#include <windows.h>  

#include <iostream>  

  

int main()  

{  

    DWORD start, stop;  

    unsigned int t = 0;  

    start = GetTickCount();  

    while (t++ < 10e+6);  

    stop = GetTickCount();  

    printf("time: %lld ms\n", stop - start);  

    return 0;  

}  

试验中,发现貌似getTickCount函数会有10几毫秒的误差,囧。。。

四、Windows下精确至微秒

//MyTimer.h//  

#ifndef __MyTimer_H__    

#define __MyTimer_H__    

#include <windows.h>    

  

class MyTimer  

{  

private:  

    int _freq;  

    LARGE_INTEGER _begin;  

    LARGE_INTEGER _end;  

  

public:  

    long costTime;            // 花费的时间(精确到微秒)    

  

public:  

    MyTimer()  

    {  

        LARGE_INTEGER tmp;  

        QueryPerformanceFrequency(&tmp);//QueryPerformanceFrequency()作用:返回硬件支持的高精度计数器的频率。    

  

        _freq = tmp.QuadPart;  

        costTime = 0;  

    }  

  

    void Start()            // 开始计时    

    {  

        QueryPerformanceCounter(&_begin);//获得初始值    

    }  

  

    void End()                // 结束计时    

    {  

        QueryPerformanceCounter(&_end);//获得终止值    

        costTime = (long)((_end.QuadPart - _begin.QuadPart) * 1000000 / _freq);  

    }  

  

    void Reset()            // 计时清0    

    {  

        costTime = 0;  

    }  

};  

#endif    

  

//main.cpp  

#include "MyTimer.h"  

#include <iostream>  

  

  

int main()  

{  

    MyTimer timer;  

    unsigned int t = 0;   

    timer.Start();  

    while (t++ < 10e+5);  

    timer.End();   

    std::cout << "耗时为:" << timer.costTime << "us";  

    return 0 ;  

}  

猜你喜欢

转载自javaeye-hanlingbo.iteye.com/blog/2410254