Измерение времени (WINAPI)

Готовый класс для измерения участков кода. В коде используется высокоточное измерение с помощью QueryPerformanceCounter

Платформа: Windows
Автор: electrik

#INCLUDE "windows.bi"
Type TimeMeasure ' класс TimeMeasure
    Private:
    As LARGE_INTEGER  m_frequency
    As LARGE_INTEGER m_startTicks
    Public:
    Declare Constructor
    Declare Sub start()
    Declare Function elapsed_ticks() As Longint
    Declare Function elapsed_min() As Double
    Declare Function elapsed_sec() As Double
    Declare Function elapsed_ms() As Double
    Declare Function elapsed_mks()As Double
End Type
Constructor TimeMeasure() ' конструктор
    QueryPerformanceFrequency(@m_frequency) ' получим частоту работы высокоточного счетчика
    start() ' измеряем начальное время в конструкторе. может пригодиться для измерения скорости выполнения кода от начала чего либо
End Constructor
Sub TimeMeasure.start() ' метод получения начального времени
    QueryPerformanceCounter(@m_startTicks) ' получим winapi функцией значение времени высокоточного счетчика
End Sub
Function TimeMeasure.elapsed_ticks() As Longint ' функция получения времени в тиках после последнего вызова  метода TimeMeasure.старт
    Dim As LARGE_INTEGER nowTicks = Any
    QueryPerformanceCounter(@nowTicks)
    Function = nowTicks.QuadPart - m_startTicks.QuadPart ' возвращаем разницу
End Function
Function TimeMeasure.elapsed_min() As Double ' получение времени в минуьтах
    Dim As LARGE_INTEGER nowTicks = Any
    QueryPerformanceCounter(@nowTicks)
    Function = (nowTicks.QuadPart - m_startTicks.QuadPart) / m_frequency.QuadPart/60
End Function
Function TimeMeasure.elapsed_sec() As Double ' получение времени в секундах
    Dim As LARGE_INTEGER nowTicks = Any
    QueryPerformanceCounter(@nowTicks)
    Function = (nowTicks.QuadPart - m_startTicks.QuadPart) / m_frequency.QuadPart
End Function
Function TimeMeasure.elapsed_ms() As Double ' получение времени в миллисекундах
    Dim As LARGE_INTEGER nowTicks = Any
    QueryPerformanceCounter(@nowTicks)
    Function = ((nowTicks.QuadPart - m_startTicks.QuadPart) / m_frequency.QuadPart) * 1.e3
End Function
Function TimeMeasure.elapsed_mks()As Double ' получение времени в микросекундах
    Dim As LARGE_INTEGER nowTicks = Any
    QueryPerformanceCounter(@nowTicks)
    Function = ((nowTicks.QuadPart - m_startTicks.QuadPart) / m_frequency.QuadPart) * 1.e6
End Function
Dim tm As TimeMeasure
Sleep 6000
Print tm.Elapsed_sec()
Sleep