Таймер глючит?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Таймер глючит?

Сообщение DVV » 27.10.2004 (Ср) 22:01

Почему при переносе программы в windows 98 таймер работает по другому.У меня -секундомер,и при показе милисек.,они показываются медленно(т.е интервал меняется что-ле)
Vadim

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 28.10.2004 (Чт) 9:09

может дело просто в прорисовке формы


чем больше визуализации процессов, тем медленее они проходят.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 28.10.2004 (Чт) 11:27

Это факт, что Timer и Sleep будут работать с разной скоростью на 98 и XP/2000/NT.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.10.2004 (Чт) 12:04

Скорость одинаковая, разная разрешающая способность.
Lasciate ogni speranza, voi ch'entrate.

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 28.10.2004 (Чт) 19:51

И что можно сделать?
Vadim

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 29.10.2004 (Пт) 1:17

Попробуй юзать не ВБшний таймер, а собственный с помощью
SetTimer,Killtimer или более точный таймер timeSetEvent,timeKillEvent.
الفيجوال بيسك الرابح

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.10.2004 (Пт) 12:27

SetTimer/KillTimer это один и тот же таймер.
Можно использовать мультимедийный таймер (timeSetEvent/timeKillEvent) либо в NT-системах таймеры Perfomance Counters.
Lasciate ogni speranza, voi ch'entrate.

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 29.10.2004 (Пт) 19:04

А поподробнее можно!
Я чё-то не слышал о таких.
Vadim

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.10.2004 (Пт) 19:19

Пример:

The CreateTimerQueueTimer function creates a timer-queue timer. This timer expires at the specified due time, then after every specified period. When the timer expires, the callback function is called.

Что означает:
Функция CreateTimerQueueTimer function создаёт таймер. Создаётся с заданием времени. По истечении времени, вызывается заданная функция.


Код: Выделить всё
' This project requires a Form and a Module
' The Form must have two command buttons (Command1
'  and Command2) on it.
'
'In a form
Private Declare Function CreateTimerQueue Lib "kernel32.dll" () As Long
Private Declare Function CreateTimerQueueTimer Lib "kernel32.dll" (ByRef phNewTimer As Long, ByVal TimerQueue As Long, ByVal Callback As Long, ByVal Parameter As Long, ByVal DueTime As Long, ByVal Period As Long, ByVal Flags As Long) As Long
Private Declare Function DeleteTimerQueue Lib "kernel32.dll" (ByVal TimerQueue As Long) As Long
Private Declare Function DeleteTimerQueueTimer Lib "kernel32.dll" (ByVal TimerQueue As Long, ByVal Timer As Long, ByVal CompletionEvent As Long) As Long
Private hQueue As Long
Private hTimer As Long
Private Sub Form_Load()
    'KPD-Team 2002
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@allapi.net
    hQueue = CreateTimerQueue()
    Command1.Caption = "Start"
    Command2.Caption = "Stop"
End Sub
Private Sub Form_Unload(Cancel As Integer)
    DeleteTimerQueue hQueue
End Sub
Private Sub Command1_Click()
    If hTimer = 0 Then
        CreateTimerQueueTimer hTimer, hQueue, AddressOf TimerCallBack, ByVal 0&, 0, 1000, 0
    End If
End Sub
Private Sub Command2_Click()
    If hTimer <> 0 Then
        DeleteTimerQueueTimer hQueue, hTimer, ByVal 0&
        hTimer = 0
    End If
End Sub

'In a module
Public Sub TimerCallBack(ByVal lpParameter As Long, ByVal TimerOrWaitFired As Long)
    Debug.Print "Timer callback..."
End Sub

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 30.10.2004 (Сб) 7:29

И мултимедийный таймер:
Код: Выделить всё
'This project requires a Form and a Module
'On the form, there should be one command button (Command1)
'and one Timer (Timer1)

'In the form:
Option Explicit
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Command1.Caption = "Start"
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'Stop the timers if they're still counting
    timeKillEvent hMMTimer
    Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
    'increment VBTimer
    VBTimer = VBTimer + 1
End Sub
Private Sub Command1_Click()
    If Command1.Caption = "Start" Then
        'Start both timers
        Timer1.Interval = 1
        Timer1.Enabled = True
        hMMTimer = timeSetEvent(1, 0, AddressOf TimerProc, 0, TIME_PERIODIC Or TIME_CALLBACK_FUNCTION)
        Command1.Caption = "Stop"
    Else
        'Stop both timers
        timeKillEvent hMMTimer
        Timer1.Enabled = False
        Command1.Caption = "Start"
        'Show result
        MsgBox "Timer1_Timer was called " & VBTimer & " times;" & vbNewLine & "TimerProc was called " & MMTimer & " times."
        VBTimer = 0
        MMTimer = 0
    End If
End Sub
'In a module
Option Explicit
Public Const TIME_ONESHOT = 0  'Event occurs once, after uDelay milliseconds.
Public Const TIME_PERIODIC = 1  'Event occurs every uDelay milliseconds.
Public Const TIME_CALLBACK_EVENT_PULSE = &H20  'When the timer expires, Windows calls thePulseEvent function to pulse the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_EVENT_SET = &H10  'When the timer expires, Windows calls theSetEvent function to set the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
Public Const TIME_CALLBACK_FUNCTION = &H0   'When the timer expires, Windows calls the function pointed to by the lpTimeProc parameter. This is the default.
Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
Public VBTimer As Long, MMTimer As Long
Public hMMTimer As Long
Sub TimerProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
    'Increment MMTimer
    MMTimer = MMTimer + 1
End Sub
الفيجوال بيسك الرابح

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 31.10.2004 (Вс) 22:47

А с обычным таймером ничего сделать нельзя?
Vadim

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 31.10.2004 (Вс) 23:10

Вот до кучи, еще один таймер, с точным интервалом:

Код: Выделить всё
Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long

Private Const TIMER_ID = 1&    'arbitrary timer ID

Public Function SetTmr(hWnd As Long, Interval As Long) As Long
  Dim Ret As Long
 
  Ret = SetTimer(hWnd, TIMER_ID, Interval, AddressOf TimerCallback)
End Function

Public Function KillTmr(hWnd As Long) As Long
  Dim Ret As Long
 
  Ret = KillTimer(hWnd, TIMER_ID)
  KillTmr = Ret
End Function

Private Sub TimerCallback(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
  Debug.Print "hWnd:" & hWnd & vbTab & "uMsg:" & uMsg & vbTab & "idEvent:" & idEvent & vbTab & "dwTime:" & dwTime
End Sub
Последний раз редактировалось KiloGraf 31.10.2004 (Вс) 23:18, всего редактировалось 1 раз.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 31.10.2004 (Вс) 23:14

Это все в класс или в контрол - и вот тебе и новый таймер.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 31.10.2004 (Вс) 23:30

gaidar писал(а):Это все в класс или в контрол - и вот тебе и новый таймер.


...да, вот если оно бы так все глдко сросталось...
...во всех трех таймерах - CALLBACK!!! А я никогда не не компилю классы с контролами, предпочитаю их Prj совать - живыми... А с AddressOf-ом, ну хоть убей, чистого класса и контролла, не получается (без mdl).

.

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 01.11.2004 (Пн) 20:45

Пример можно?!
Vadim

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 01.11.2004 (Пн) 20:53

DVV писал(а):Пример можно?!


это к кому вопрос? и пример чего?

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 01.11.2004 (Пн) 21:27

Set timer,Kill timer

Какой-нибудь пример,пожалуйста.
Vadim

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 01.11.2004 (Пн) 21:38

Лови...
Вложения
SetTimer_Win32Api.rar
SystemTimer
(1.55 Кб) Скачиваний: 32

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 01.11.2004 (Пн) 22:21

Чё-то я не понимаю,всё равно не получается.Почему разработчики не учли этот момент.(я про Microsoft).Или всё же можно как нибудь сделать.У меня сенундомер должен же показывать милисекунды.
Vadim

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 01.11.2004 (Пн) 22:26

поиграйся с константой:

Код: Выделить всё
Private Const TIME_INTERVAL = 1000&


это и есть интервал.

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 01.11.2004 (Пн) 22:29

Я интервал менял!
Vadim

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 01.11.2004 (Пн) 22:34

И чё получи?
Nonsense in BASIC. © 1982 ...

KiloGraf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 142
Зарегистрирован: 21.10.2004 (Чт) 7:37
Откуда: берутся такие глупые вопросы?

Сообщение KiloGraf » 01.11.2004 (Пн) 22:48

Таймет должен показывать аптайм винды, через каждый TIME_INTERVAL
Пример так сделан.
Смотри в CallBack'е!!!
Nonsense in BASIC. © 1982 ...

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 02.11.2004 (Вт) 20:11

В чём прикол секунды то нармально ,а далее...!
Vadim

DVV
Бывалый
Бывалый
 
Сообщения: 212
Зарегистрирован: 02.09.2004 (Чт) 21:03
Откуда: Уфа

Сообщение DVV » 04.11.2004 (Чт) 20:40

На счёт мультимедийного таймера,можно по подробнее(как зад-ся интервал и т.п)
Заранее спасибо!
Vadim

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 04.11.2004 (Чт) 21:47

Мастер VB - Steve McMahon написал весьма неплохой таймер, по скорости он просто зверь.
Зацените...

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList