void CLFE_Timer::Play() { if (m_TimerStatus == tsStop) { m_n64TimeBegin = GetCurrentCount(); } m_TimerStatus = tsRun; }
DWORD CLFE_Timer::GetTime() { if (m_TimerStatus != tsRun) { return DWORD((m_n64TimeEnd - m_n64TimeBegin) * m_nPrecision / m_n64Freq); } else { return DWORD((GetCurrentCount() - m_n64TimeBegin) * m_nPrecision / m_n64Freq); } }
unsigned int decode(model_type const & model) { uint32_t const Count = GetCurrentCount(model.getTotal()); unsigned int Symbol; for(Symbol=model.getSigma()-1;model.getLow(Symbol)>Count;Symbol--) { } RemoveRange(model.getLow(Symbol),model.getHigh(Symbol),model.getTotal()); return Symbol; }
DWORD DInputKeyboard::DInputKeyboardThreadFunc(){ status = 1; DIDEVICEOBJECTDATA buf[16]; while(true){ WaitForSingleObject(m_hEvent, INFINITE); DWORD n = 16; if(!m_lpDIDevice) break; HRESULT hr = m_lpDIDevice->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), buf, &n, 0); if(hr != DI_OK){ // device lost if(!m_lpDIDevice || m_Stop) goto exit; while(m_lpDIDevice->Acquire()!=DI_OK){ Sleep(100); if(!m_lpDIDevice || m_Stop) goto exit; } continue; } LONGLONG timeStamp = GetCurrentCount(); if(GetForegroundWindow()==m_hWnd){ for(int x=0; x<n; x++){ DWORD vkCode = scancode_virtual_map[buf[x].dwOfs & 0xff]; bool bKeyDown = ((buf[x].dwData&0x80) !=0); if( GAMEDATA.gamemode==GAME_MODE_NORMAL && ScreenState==SCREEN_GAMEMAIN && !core.paused ) core._notemana.PushKeyEvent(vkCode, bKeyDown, timeStamp); /*// debug scan code static int kk=0; char str[256]; sprintf(str,"DInput %d %08x->%08x %c",++kk,buf[x].dwOfs,vkCode,bKeyDown?'D':'U'); SetWindowTitle(m_hWnd,str);*/ } } if(m_Stop){ m_Stop = false; break; } } exit: m_hThread = NULL; m_threadID = 0; status = 0; return 0; }
void CLFE_Timer::Pause() { m_n64TimeEnd = GetCurrentCount(); m_TimerStatus = tsPause; }
void CLFE_Timer::Stop() { m_n64TimeEnd = GetCurrentCount(); m_TimerStatus = tsStop; }