获得微秒数 5

来源:互联网 发布:echo动作数据mmd 编辑:程序博客网 时间:2024/06/01 09:44

windows API计时最准的是 QueryPerformanceCounter ,CPU计时的其他任何时间函数都是用操作系统时间片计时,

多核下Windows的时间片是15毫秒,单核10毫秒,决定了你的最高精度10-15毫秒。


CPU计时必须有CPU的硬件支持,ARM版WinCE也有QueryPerformanceCounter,但他的精度和时间片计时一样,

新的x86基本都能高精度计时。


利用CPU的时钟周期的差数就可以计算出一个纳秒级的计时。公式如下  

时间   =   CPU时钟周期数差数   /   CPU主频速率(Hz)


vc中的实现代码如下


//在应用程序中精确获取系统时间,则使用下面函数:QueryPerformanceCounter();//获取CPU频率就需要下面这个函数了:QueryPerformanceFrequency();//例子#include <stdio.h>#include <Windows.h>LONGLONG GetLastTime(){    // CPU频率    LARGE_INTEGER liQPF;        // 记录开始和结束时间    LARGE_INTEGER liStartTime, liEndTime;        // 记录过程时间    LONGLONG llLastTime;        // 获取CPU频率    QueryPerformanceFrequency(&liQPF);        // 获取开始时间    QueryPerformanceCounter(&liStartTime);        Sleep(10);        // 获取结束时间    QueryPerformanceCounter(&liEndTime);        // 计算持续时间(us)    llLastTime = (liEndTime.QuadPart - liStartTime.QuadPart) * 1000000 / liQPF.QuadPart; // * 1000 --> ms      return llLastTime;}int main(void){    DWORD start,stop;    start   = GetTickCount();    Sleep(10);    stop = GetTickCount();    printf("%d ms\n",stop-start); //GetTickCount()计算得到的时间间隔精度为15ms,例如计算10ms间隔结果为0    printf("%d us\n",GetLastTime());//应用程序中时间间隔计算精确到us,QueryPerformanceCounter()    return 0;}



1 获取系统时间(精确到微秒),驱动中KeQueryPerformanceCounter,Win32程序QueryPerformanceCounter

2  Windows下精确获取程序的运行时间可精确到微妙


0 0
原创粉丝点击