精确控制游戏的fps

来源:互联网 发布:恐龙战队电影玩具淘宝 编辑:程序博客网 时间:2024/04/28 01:08

 

LARGE_INTEGER frequency, count, oldCount, oldOldCount;DWORD_PTR _procMask;DWORD_PTR _sysMask;DWORD_PTR _mask;GetProcessAffinityMask(GetCurrentProcess(), &_procMask, &_sysMask);if( _procMask == 0x00000000)_procMask = 0x00000001;_mask = 0x00000001;while((_mask & _procMask) == 0){_mask <<= 1;}HANDLE _thread = GetCurrentThread();DWORD_PTR _oldMask = SetThreadAffinityMask(_thread, _mask);QueryPerformanceFrequency(&frequency);QueryPerformanceCounter(&count);SetThreadAffinityMask(_thread, _oldMask);oldOldCount = oldCount = count;float _secondPerTick = (1.0f / (float)(frequency.QuadPart)) * 1000.0f;frequency.QuadPart /= 60;while(msg.message != WM_QUIT){if( PeekMessage(&msg, 0, 0, 0, PM_REMOVE) ){TranslateMessage(&msg);DispatchMessage(&msg);}else{float tick = (oldCount.QuadPart - oldOldCount.QuadPart) * _secondPerTick;float _updateAndRenderStart = g_GetApplication().GetRoot()->getWatch()->getElapsedMilliseconds();pFnUpdateAndRender(tick);float _updateAndRenderEnd = g_GetApplication().GetRoot()->getWatch()->getElapsedMilliseconds();/*if(_updateAndRenderEnd - _updateAndRenderStart >= 30.0f){char _updateAndRenderLog[CHAR_BUFFER_MAX] = {'\0'};_snprintf(_updateAndRenderLog, CHAR_BUFFER_CONTENT_MAX, "_updateAndRenderEnd - _updateAndRenderStart = %f.", _updateAndRenderEnd - _updateAndRenderStart);g_GetApplication().GetRoot()->getLogManager()->logMessage(_updateAndRenderLog);}*/if(_updateAndRenderEnd - _updateAndRenderStart > 17.0f){HANDLE _thread = GetCurrentThread();DWORD_PTR _oldMask = SetThreadAffinityMask(_thread, _mask);QueryPerformanceCounter((PLARGE_INTEGER)&count);SetThreadAffinityMask(_thread, _oldMask);}else{do{HANDLE _thread = GetCurrentThread();DWORD_PTR _oldMask = SetThreadAffinityMask(_thread, _mask);QueryPerformanceCounter((PLARGE_INTEGER)&count);SetThreadAffinityMask(_thread, _oldMask);} while (count.QuadPart - oldCount.QuadPart < frequency.QuadPart);}oldOldCount = oldCount;oldCount = count;}}

原创粉丝点击