浠婂ぉ鍦╟sdn涓婄湅鍒頒簡涓綃囨枃绔狅細http://blog.csdn.net/lanzhengpeng2/archive/2008/05/06/2401554.aspx
璁茬殑涔熸濂芥槸榪欎釜闂錛岃褰曚竴涓嬨?br>
鍦ㄤ嬌鐢╰imeGetTime()鐨勪唬鐮佸潡鐨勫墠鍚庡姞涓?span class="Apple-style-span" style="border-collapse: separate; color: #000000; font-family: Simsun; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;">timeBeginPeriod(1)鍜?/span>timeEndPeriod(1)錛屽氨鍙互鎻愰珮timeGetTime()鐨勭簿搴︺?br>
鍚屾椂錛屽彲浠ュ埄鐢╰imeSetEvent鍐欎簡涓涓潬寰椾綇鐨勪紤鐪犲嚱鏁癧浠g爜鏉ヨ嚜涓婅堪鏂囩珷]錛?br>
static void XSleep(DWORD dwDelay,HANDLE hEvent)
{
MMRESULT hTimer = timeSetEvent(dwDelay,1,(LPTIMECALLBACK)hEvent,0,TIME_ONESHOT | TIME_CALLBACK_EVENT_SET);
MsgWaitForMultipleObjectsEx(1,&hEvent,INFINITE,QS_ALLINPUT,0); //褰撴湁Windows娑堟伅鏃訛紝榪樿兘緇х畫澶勭悊Windows娑堟伅銆傛晠閫夋嫨浜嗚繖涓嚱鏁般?/span>
timeKillEvent(hTimer);
}
娑堟伅寰幆[浠g爜鏉ヨ嚜涓婅堪鏂囩珷]錛?br>
MSG msg;
DWORD dwLastTime;
HANDLE hSleepEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
timeBeginPeriod(1);
dwLastTime = timeGetTime();
while(isActive())
{
//闇瑕佷竴鐩村鐞哤indows娑堟伅鍒版棤娑堟伅澶勭悊涓烘
for(;PeekMessage(&msg,NULL,0,0,PM_REMOVE);)
{
if(msg.message == WM_QUIT)
{
CloseHandle(hSleepEvent);
timeEndPeriod(1);
return ;
}
if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
DWORD FrameDelay = max(1,1000/max(1,GetMaxFPS()));
DWORD dwTime = timeGetTime();
if(dwLastTime + FrameDelay > dwTime)
{
XSleep(dwLastTime + FrameDelay - dwTime,hSleepEvent);
}
else
{
update();
dwLastTime += ((dwTime - dwLastTime) / FrameDelay) * FrameDelay; //褰撳疄闄呭撫鏁頒弗閲嶄綆浜庨鏈熷撫鏁版椂錛岃繖孌典唬鐮佸彲浠ュ畬鎴愯煩甯у姛鑳斤紱褰撳疄闄呭撫鏁板ぇ浜庣瓑浜庨鏈熷撫鏁版椂錛岃繖孌典唬鐮佷粛鐒跺彲浠ヤ嬌甯т箣闂寸殑鏃墮棿闂撮殧鍥哄畾銆備箣鍓嶈阿Boss娌℃湁澶勭悊濂界殑涓昏灝辨槸榪欎釜銆?/span>
}
}
CloseHandle(hSleepEvent);
timeEndPeriod(1);
榪欐牱錛屾椂闂磋宸氨浼氬湪1ms涔嬪唴浜嗭紝娓告垙涔熷氨涓嶄細鎶栧姩浜嗐?br> 
]]>