⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.cpp

📁 wince (windows mobile)绘制的很好实例,可以作为视频开发的参考
💻 CPP
字号:

#include "stdafx.h"
#include "timer.h"


unsigned int lowshift;
double pfreq;
static double curtime = 0.0;
static double lastcurtime = 0.0;
LARGE_INTEGER g_freq;

int TimerInit()
{
unsigned int lowpart, highpart;;

	if(QueryPerformanceFrequency(&g_freq))
	{
	}
	else
	{
		return TIMER_NO_PERFCOUNTER;
	}

	lowpart = (unsigned int)g_freq.LowPart;
	highpart = (unsigned int)g_freq.HighPart;
	lowshift = 0;

	while (highpart || (lowpart > 2000000.0))
	{
		lowshift++;
		lowpart >>= 1;
		lowpart |= (highpart & 1) << 31;
		highpart >>= 1;
	}

	pfreq = 1.0 / (double)lowpart;
	return TIMER_OK;
}

LARGE_INTEGER TimerGet()
{
LARGE_INTEGER time;

	time.QuadPart=0;
	QueryPerformanceCounter(&time);
	return time;
}

//routine taken from PocketQuake sources
double TimerGetDouble()
{
static int			sametimecount;
static unsigned int	oldtime;
static int			first = 1;
LARGE_INTEGER		PerformanceCount;
unsigned int		temp, t2;
double				time;

	QueryPerformanceCounter (&PerformanceCount);

	temp = ((unsigned int)PerformanceCount.LowPart >> lowshift) |
		((unsigned int)PerformanceCount.HighPart << (32 - lowshift));

	if (first)
	{
		oldtime = temp;
		first = 0;
	}
	else
	{
		// check for turnover or backward time
		if ((temp <= oldtime) && ((oldtime - temp) < 0x10000000))
		{
			oldtime = temp;	// so we can't get stuck
		}
		else
		{
			t2 = temp - oldtime;

			time = (double)t2 * pfreq;
			oldtime = temp;

			curtime += time;

			if (curtime == lastcurtime)
			{
				sametimecount++;

				if (sametimecount > 100000)
				{
					curtime += 1.0;
					sametimecount = 0;
				}
			}
			else
			{
				sametimecount = 0;
			}

			lastcurtime = curtime;
		}
	}
	return curtime;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -