'' /////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
' // //
' // Web: http://InfrAngeluX.Sytes.Net/ //
' // //
' // |-> Pueden Distribuir Este Codigo siempre y cuando //
' // no se eliminen los creditos originales de este codigo //
' // No importando que sea modificado/editado o engrandesido //
' // o achicado, si es en base a este codigo //
' /////////////////////////////////////////////////////////////
Option Explicit
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long
Private m_CurFrequency As Currency
Private m_HasCounter As Boolean
Private m_FrameStart As Currency
Private m_FrameEnd As Currency
Private m_CurTime As Currency
Private m_Delay As Currency
Private m_LastSecond As Long
Private m_LastSecondCount As Long
Private m_FrameCount As Long
Private Sub Class_Initialize()
m_HasCounter = QueryPerformanceFrequency(m_CurFrequency)
m_CurFrequency = m_CurFrequency * 10000
End Sub
Public Function GetFPS() As Long
GetFPS = m_LastSecondCount
End Function
Public Sub LimitFrames(ByVal nFPS As Integer)
If Second(Now) <> m_LastSecond Then
m_LastSecond = Second(Now)
m_LastSecondCount = m_FrameCount
m_FrameCount = 0
End If
m_FrameCount = m_FrameCount + 1
QueryPerformanceCounter m_FrameEnd
' // m_Delay = ((1000 / nFPS) * m_CurFrequency / 10000000) - (m_FrameEnd - m_FrameStart)
m_Delay = ((1 / nFPS) * m_CurFrequency / 10000) - (m_FrameEnd - m_FrameStart)
Do
DoEvents
QueryPerformanceCounter m_CurTime
Loop Until (m_CurTime - m_FrameEnd) >= m_Delay
QueryPerformanceCounter m_FrameStart
End Sub