День добрый!
Нужен таймер с разрешением выше стандартного, такой как тут:
http://www.windojitsu.com/code/hirestimer.cs.html
Пробовал перевести с Шарпа - не вышло.
Помогите кт чем может!
--
Заранее спасибо!
Imports System.Runtime.InteropServices
Public Class PerformanceMonitoring
Friend Structure PerfCounter
Private NotInheritable Class NativeMethods
Private Sub New()
End Sub
<DllImport("kernel32.dll", SetLastError:=True)> _
Friend Shared Function QueryPerformanceCounter(ByRef lpPerformanceCount As Long) _
As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Friend Shared Function QueryPerformanceFrequency(ByRef frequency As Long) As <MarshalAs(UnmanagedType.Bool)> _
Boolean
End Function
End Class
Private mStart As Long
Public Sub Start()
mStart = 0
NativeMethods.QueryPerformanceCounter (mStart)
End Sub
Public Function Finish() As Double
Dim mFinish As Long = 0, mFreq As Long = 0
NativeMethods.QueryPerformanceCounter (mFinish)
NativeMethods.QueryPerformanceFrequency (mFreq)
Return ((mFinish - mStart)/mFreq)
End Function
End Structure
End Class
Imports System.Runtime.InteropServices
Namespace Time
''' <summary>
'''Эта структура позволяет подсчитать скорость выполнения кода одним из
'''наиболее точным способов. Фактически вычисления производятся в тактах процессора.
''' </summary>
Public Structure PerfCounter
#Region " Declares"
<DllImport("Kernel32.dll")> _
Friend Shared Function QueryPerformanceCounter(ByRef performanceCount As Int64) As Boolean
End Function
<DllImport("Kernel32.dll")> _
Friend Shared Function QueryPerformanceFrequency(ByRef frequency As Int64) As Boolean
End Function
Public Enum TimeUnit As Integer
Наносекунды = 1
Микросекунды = 2
Милисекунды = 3
Секунды = 4
Минуты = 5
Часы = 6
End Enum
#End Region
Private _start As Int64
Private _finish As Int64
Private _freq As Int64
''' <summary>
''' Начинает подсчет вермени выполнения.
''' </summary>
Public Sub Start()
_start = 0
QueryPerformanceCounter(_start)
End Sub
''' <summary>
''' Завершает подсчет вермени исполнения
''' </summary>
Public Function Finish(ByVal Unit As TimeUnit) As Single
QueryPerformanceCounter(_finish)
QueryPerformanceFrequency(_freq)
Select Case Unit
Case TimeUnit.Наносекунды : Return Наносекунды
Case TimeUnit.Микросекунды : Return Микросекунды
Case TimeUnit.Милисекунды : Return Милисекунды
Case TimeUnit.Секунды : Return Секунды
Case TimeUnit.Минуты : Return Минуты
Case TimeUnit.Часы : Return Часы
End Select
End Function
Public ReadOnly Property Часы() As Integer
Get
Return CType(_finish - _start, Single) / CType(_freq, Single) / 360.0!
End Get
End Property
Public ReadOnly Property Минуты() As Integer
Get
Return CType(_finish - _start, Single) / CType(_freq, Single) / 60.0!
End Get
End Property
Public ReadOnly Property Секунды() As Integer
Get
Return CType(_finish - _start, Single) / CType(_freq, Single)
End Get
End Property
Public ReadOnly Property Милисекунды() As Integer
Get
Return CType(_finish - _start, Single) / CType(_freq, Single) * 1000.0!
End Get
End Property
Public ReadOnly Property Микросекунды() As Integer
Get
Return CType(_finish - _start, Single) / CType(_freq, Single) * 1000000.0!
End Get
End Property
Public ReadOnly Property Наносекунды() As Integer
Get
Return CType(_finish - _start, Single) / CType(_freq, Single) * 1.0E+9!
End Get
End Property
End Structure
End Namespace
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41