Страница: 1 |
Страница: 1 |
Вопрос: Очень точный таймер
Добавлено: 21.08.06 18:19
Автор вопроса: Георгий | Web-сайт:
Помогите пожалуйста. Мне нужно сделать очень точный таймер. Стандартный не подойдет - если комп тормознет, то и показания будут неточными.
Я слышал что для этого есть какая-то функция WinAPI, но я не знаю какая.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #1
Добавлено: 21.08.06 18:23
Можно обойтись и без API, правда точный до 0.001 с. - с помощью системного таймера и цикла Do с DoEvents:
Dim D As Double
Dim Interval As Double 'Интервал таймера в секундах, мин. значение 0.001
Interval = 0.001
Do
If Abs(D - Timer) > Interval Then
'Здесь пишеш свой код
End If
DoEvents
Loop
Номер ответа: 2
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #2
Добавлено: 21.08.06 18:24
p. s. Правда на этот тоже тормоза влияют
Номер ответа: 3
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #3
Добавлено: 21.08.06 20:37
форма:
Me.AutoRedraw = True
SetTimer Me.hwnd, 0, 1000, AddressOf TimerProc
End Sub
Private Sub Form_Unload(Cancel As Integer)
KillTimer Me.hwnd, 0
End Sub
модуль:
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public t As Long
Public Sub TimerProc()
t = t + 1
Form1.Cls
Form1.Print t
End Sub
Номер ответа: 4
Автор ответа:
Георгий
Вопросов: 6
Ответов: 5
Web-сайт:
Профиль | | #4
Добавлено: 21.08.06 20:40
Спасибо.
Номер ответа: 5
Автор ответа:
Георгий
Вопросов: 6
Ответов: 5
Web-сайт:
Профиль | | #5
Добавлено: 21.08.06 21:40
Извините, возникла проблема:
VB сообщает, что Invalid use of AddressOf operator
Номер ответа: 6
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #6
Добавлено: 21.08.06 22:26
TimerProc должна находиться в модуле.
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 22.08.06 09:58
Только вот я бы не сказал что это таймер особенно точный
Можно использовать QueryPerformanceFrequency + QueryPerformanceCounter, но железо вовсе не обязано всю эту хрень поддерживать