logo资料库

C/C++获取(毫秒/微秒/纳秒级)系统时间差方法大全.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
VC获取系统时间差
方法一 利用 SYSTEMTIME
方法二 利用 GetTickCount()函数
方法三 使用clock()函数
方法四 获取高精度时间差
VC 获取系统时间差 注意:使用相应的函数,记得包含相应的头文件。 许成喜 2012-10-5 方法一 利用 SYSTEMTIME SYSTEMTIME STRUCT{ WORD wYear ; WORD wMonth ; WORD wDayOfWeek ; WORD wDay ; WORD wHour ; WORD wMinute ; WORD wSecond ; WORD wMilliseconds ; }SYSTEMTIME ENDS 该方法可以获取毫秒级别的时间差。需要用到 Windows API。 要求:#include 用法: SYSTEMTIME start,end; GetLocalTime(&start); ………… GetLocalTime(&end); unsigned long TimeDiff(SYSTEMTIME start,SYSTEMTIME end) { long lLMinllis = (start.wHour*3600 + start.wMinute*60 + start.wSecond)*1000 + start.wMilliseconds; long lRMinllis = (end.wHour*3600 + end.wMinute*60 + end.wSecond)*1000 + end.wMilliseconds; return (lRMinllis - lLMinllis); } 方法二 利用 GetTickCount()函数 该方法可以获取毫秒级别的时间差。 要求:#include 用法: DWORD start,end;
start = GetTickCount(); ………………………. end = GetTickCount(); 方法三 使用 clock()函数 要求:#include 用法:精确到毫秒级别 double time=clock(); ……………………….. double Inteval=clock()-time; 方法四 获取高精度时间差 QueryPerformanceFrequency() ,QueryPerformanceCounter()函数 这两个函数是 VC 提供的仅供 Windows 9X 使用的高精度时间函数,并要求计算机从硬件上 支持高精度计时器。QueryPerformanceFrequency()函数和 QueryPerformanceCounter()函数的 原型为: BOOL QueryPerformanceFrequency(LARGE—INTEGER *lpFrequency); BOOL QueryPerformanceCounter(LARGE—INTEGER *lpCount) 数据类型 LARGE—INTEGER 既可以是一个作为 8 字节长的整型数,也可以是作为两 个 4 字节长的整型数的联合结构,其具体用法根据编译器是否支持 64 位而定。该类型的定 义如下: ; union —LARGE_INTEGER typedef { struct { DWORD LONG LowPart; HighPart; // // 4 字节整型数 4 字节整型数 }; LONGLONG QuadPart; // 8 字节整型数 } LARGE—INTEGER; 在进行计时之前,应该先调用 QueryPerformanceFrequency()函数获得机器内部计时器的 时钟频率。笔者在主频为 266、300、333 的三种 PentiumⅡ机器上使用该函数,得到的时钟 频率都是 1193180Hz。接着,笔者在需要严格计时的事件发生之前和发生之后分别调用 QueryPerformanceCounter()函数,利用两次获得的计数之差和时钟频率,就可以计算出事件 经历的精确时间。 要求: #include #include 用法:
LARGE_INTEGER LONGLONG DOUBLE litmp; QPstart,QPend; dfMinus,dfFreq,dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (DOUBLE)litmp.QuadPart; QueryPerformanceCounter(&litmp); QPstart = litmp.QuadPart; ………………………….. QueryPerformanceCounter(&litmp); QPend = litmp.QuadPart; dfMinus = (double)(QPend - QPstart); dfTim = dfMinus/dfFreq; //单位(秒)
分享到:
收藏