Таймер через API

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Diamond
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.10.2002 (Пн) 13:11
Откуда: Питер

Таймер через API

Сообщение Diamond » 01.08.2003 (Пт) 13:44

Мне нужен больший интервал времени, чем максимальный у стандартного таймера. Может, есть таймероподобная фунцкия API, где диапазон интервала побольше? Если есть, напишите plz...
ХыХ.

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 01.08.2003 (Пт) 14:09

Declare Function SetTimer Lib "user32" Alias "SetTimer" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Cav
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 14.07.2003 (Пн) 19:25

Сообщение Cav » 01.08.2003 (Пт) 23:11

Альтернатива:

1) прощитать за сколько времени выполняется следю вещь:

t=timer
for i=0 to 10000
i=i+1
next
x=timer-t
' x - время. за которое один раз выполняется цикл. Оно маленькое на медленных компах

елси поделить нужное время на X (x<>0), получем коэввициент K:

for i=0 to 10000*K
i=i+1
next

вот и наша задержка. Почти точная.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 02.08.2003 (Сб) 1:25

Cav
Ну ты дал... Проще ввести static переменную, ежели таймер 60000, то static 2 даёт 2 минуты и так далее.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 02.08.2003 (Сб) 10:30

Код: Выделить всё
Dim Ti As Single

Ti = Timer
Do
     DoEvents
     If Timer - Ti >= НУЖНЫЙ_ИНТЕРВАЛ Then Exit Do
Loop

Вот и всё (Нужный интервал в СЕКУНДАХ)
А для чего тебе, может проще моно зделать?
http://poetry.mooo.com
http://poetry.myboard.info
«Человек есть нечто, что до́лжно превзойти» (Ф. Ницше)

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.08.2003 (Пн) 11:00

GoGosha
Хорошее решение. Но во время его выполнения, загрузка процессора подскочит до 100%.
На мой взгляд:
Код: Выделить всё
Private Sub Timer1_Timer()
    Static Count As Integer
    Count = Count + 1
    If Count <> n Then Exit Sub
    'КОД
    Count = 0
End Sub

получше будет.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

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

Сообщение alibek » 04.08.2003 (Пн) 13:31

А еще лучше
Код: Выделить всё
Static ExpTime As Single
ExpTime = ExpTime + Timer1.Inderval/1000
...

вот :)
Lasciate ogni speranza, voi ch'entrate.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 04.08.2003 (Пн) 13:37

ИМХО, товарищ Aleksej привел самое разумное решение.
А вариант от GoGosha я бы модифицировал так:

Код: Выделить всё
Dim Ti As Single
Ti = Timer + НУЖНЫЙ_ИНТЕРВАЛ
Do: DoEvents
Loop Until Timer >= Ti


(Кстати, на счет времени 23:59:59, при задержке больше секунды, код прийдется еще модифицировать)
Поэтому вместо этого лучше использовать Sleep, но он, правда, замораживает прогу на время действия, зато не кушает ресурсы.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 04.08.2003 (Пн) 13:43

По моему кое-кто путает выполнение кода по таймеру, с паузой при выполнении кода... :)
2 alibek
А дальше?
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com


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

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

Сейчас этот форум просматривают: PetalBot, Yandex-бот и гости: 4

    TopList