VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "CPrecisionTiming"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

Private Declare Function QueryPerformanceCounter Lib "kernel32" (ByRef lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (ByRef lpFrequency As Currency) As Long


Private m_curFreq As Currency, m_curTimingResult As Currency, m_curTimingStart As Currency, m_curOverhead As Currency

Public Property Get Result() As Currency  'Milliseconds
Result = m_curTimingResult
End Property
Public Sub StartTiming()
'Calculate API calls overhead
Call QueryPerformanceCounter(m_curTimingStart)
Call QueryPerformanceCounter(m_curOverhead)

m_curOverhead = m_curOverhead - m_curTimingStart

'Store the starting value
Call QueryPerformanceCounter(m_curTimingStart)
End Sub
Public Sub StopTiming()
Dim curTimingEnd As Currency

Call QueryPerformanceCounter(curTimingEnd)

m_curTimingResult = ((curTimingEnd - m_curTimingStart) / m_curFreq) * 1000  'Cache the result
End Sub
Private Sub Class_Initialize()
Call QueryPerformanceFrequency(m_curFreq)
End Sub
