美文网首页
高精度计时

高精度计时

作者: 不会code的程序猿 | 来源:发表于2017-02-18 13:42 被阅读52次

    Windows

    ①计时统计前先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。
    ②在需要计时的事件发生前和发生之后分别QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间(精度可以达到微秒级别)。

    #include <windows.h>  
    #include <iostream>  
    
    int main()
    {
        LARGE_INTEGER timeStart;    //开始时间  
        LARGE_INTEGER timeEnd;      //结束时间  
    
        LARGE_INTEGER frequency;    //计时器频率  
        QueryPerformanceFrequency(&frequency);
        double quadpart = (double)frequency.QuadPart;//计时器频率  
    
        QueryPerformanceCounter(&timeStart);
        Sleep(1000);//延时一秒  
        QueryPerformanceCounter(&timeEnd);
    
        //得到两个时间的耗时  
        double elapsed1= (timeEnd.QuadPart - timeStart.QuadPart) / quadpart;
        std::cout << elapsed1 <<"s"<< std::endl;//单位为秒,精度为微秒(1000000/cpu主频)  
        double elapsed2 = (timeEnd.QuadPart - timeStart.QuadPart)*1000 / quadpart;
        std::cout << elapsed2 <<"ms"<< std::endl;//单位为秒,精度为微秒(1000000/cpu主频)  
        system("pause");
        return 0;
    }
    

    Linux

    struct  timeval{
           long  tv_sec;/*秒*/
           long  tv_usec;/*微妙*/
    
    };
    
    #include <stdio.h>
    #include <sys/time.h>
    
    int main() {
        struct timeval start, end;
        gettimeofday( &start, NULL );
        sleep(3);
        gettimeofday( &end, NULL );
        int timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec -start.tv_usec;
        printf("time: %d 微秒\n", timeuse);
        return 0;
    }
    

    gettimeofday能得到微秒数,比毫秒还要更精确。

    相关文章

      网友评论

          本文标题:高精度计时

          本文链接:https://www.haomeiwen.com/subject/faeputtx.html