Измерение времени (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