Windows 各种计算时间函数总结

标准C++的函数(Windows与Linux均可用)

头文件:#include


time_t    time(time_t *timer);      秒为单位


返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。

time_t实际是个long长整型typedef     long    time_t;

头文件:#include


clock_t     clock(void);       毫秒为单位


返回进程启动到调用函数时所经过的CPU时钟计时单元(clock tick)数,称之为挂钟时间(wal-clock) 。

clock_t实际是个long长整型typedef    long    clock_t;

 

#include 
#include 
#include  //time_t time()  clock_t clock()
 
int main()
{
	//用time()来计时   单位: 秒
	time_t timeBegin, timeEnd;
	timeBegin = time(NULL);
	Sleep(1000);
	timeEnd = time(NULL);
	printf("%d\n", timeEnd - timeBegin);


	//用clock()来计时  单位: 毫秒
	clock_t  clockBegin, clockEnd;
	clockBegin = clock();
	Sleep(800);
	clockEnd = clock();
	printf("%d\n", clockEnd - clockBegin);
}


Windows系统API函数(仅可用于Windows)

头文件:#include            

引用库:#pragma comment(lib, "Winmm.lib")  


DWORD timeGetTime(VOID);    毫秒为单位


返回从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天


头文件: #include  


DWORD WINAPI  GetTickCount(void);   毫秒为单位


这个函数和timeGetTime()一样也是返回系统时间,以毫秒为单位。

GetTickCount精度是15ms左右,timeGetTime的精度是1ms (精度更高) 游戏里面一般用的是timeGetTime

Sleep不是一个很稳定的过程,所以当Sleep比较小的时候,比如1-10ms的时候,两个结果会有比较大的差异;在100ms以上的时候,基本上两个方法得到时间基本上是相近的。

#include 
#include  
 #include 
 #pragma comment(lib, "Winmm.lib")

int main()
{
	int  N = 3;

	//用timeGetTime()来计时  毫秒
	DWORD  dwBegin, dwEnd;
	dwBegin = timeGetTime();
	Sleep(N);
	dwEnd = timeGetTime();
	printf("%d\n", dwEnd - dwBegin);


	//用GetTickCount()来计时  毫秒
	DWORD  dwGTCBegin, dwGTCEnd;
	dwGTCBegin = GetTickCount();
	Sleep(N);
	dwGTCEnd =   GetTickCount();
	printf("%d\n", dwGTCEnd - dwGTCBegin);
}


头文件: #include  


高精度计时, 微秒为单位(1毫秒=1000微秒)。


先看二个函数的定义

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);

得到高精度计时器的值(如果存在这样的计时器)。

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

返回硬件支持的高精度计数器的频率(次每秒),返回0表示失败。

再看看LARGE_INTEGER

它其实是一个联合体,可以得到__int64 QuadPart;也可以分别得到低32位DWORD LowPart和高32位的值LONG HighPart。

在使用时,先使用QueryPerformanceFrequency()得到计数器的频率,再计算二次调用QueryPerformanceCounter()所得的计时器值之差,用差去除以频率就得到精确的计时了。

#include 
#include  

int main()
{ 
	//用QueryPerformanceCounter()来计时  微秒
	LARGE_INTEGER  large_interger;
	double dff;
	__int64  c1, c2;
	QueryPerformanceFrequency(&large_interger);
	dff = large_interger.QuadPart;
	QueryPerformanceCounter(&large_interger);
	c1 = large_interger.QuadPart;
	Sleep(1);
	QueryPerformanceCounter(&large_interger);
	c2 = large_interger.QuadPart;
	printf("本机高精度计时器频率%lf\n", dff);
	printf("第一次计时器值%I64d 第二次计时器值%I64d 计时器差%I64d\n", c1, c2, c2 - c1);
	printf("计时%lf毫秒\n", (c2 - c1) * 1000 / dff);
}


你可能感兴趣的:(windows,C/C++)