Задержка при виполнении кода

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Задержка при виполнении кода

Сообщение Emzari » 16.06.2003 (Пн) 20:17

Можно ли организовать задержку при виполнении кода, без использования пустых циклов. Может есть какое нибудь функция или чтото вроде.

moderator
Модератор
Модератор
 
Сообщения: 1896
Зарегистрирован: 10.12.2001 (Пн) 18:11
Откуда: Украина, Харьков

Сообщение moderator » 16.06.2003 (Пн) 22:04

Можно. Берешь API-Guide и ищещь в нем слово "pause".
Модератор
http://www.vbstreets.ru / moderator@vbstreets.ru

... Почетные награды: [*], [+], [!]. Все еще впереди...

kazah_
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 13.01.2003 (Пн) 18:37
Откуда: Russia

Сообщение kazah_ » 17.06.2003 (Вт) 1:16

попробуй использовать таймер. Клевая штука... помогает иногда. и парева никакого :lol:
Mr DEN - THE WAY YOU KNOW / Мр. ДЕН - Ваш Путь к Познанию!

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 17.06.2003 (Вт) 6:04

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
а зтем вызываешь например
Sleep 1000
, где 1000-значение в миллисекундах, тобишь одна секунда

moderator
Модератор
Модератор
 
Сообщения: 1896
Зарегистрирован: 10.12.2001 (Пн) 18:11
Откуда: Украина, Харьков

Сообщение moderator » 17.06.2003 (Вт) 14:41

kazah_ писал(а):попробуй использовать таймер. Клевая штука... помогает иногда. и парева никакого :lol:


Таймер - не всегда хорошее решение. Для повторяющихся действий (вывод на экран времени, например) таймер очень подходит. А для организации задержек в коде таймер - оч-ч-ень плохой способ.
Модератор
http://www.vbstreets.ru / moderator@vbstreets.ru

... Почетные награды: [*], [+], [!]. Все еще впереди...

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

Сообщение X-BOND » 20.06.2003 (Пт) 17:10

Таймер - не всегда хорошее решение. Для повторяющихся действий (вывод на экран времени, например) таймер очень подходит. А для организации задержек в коде таймер - оч-ч-ень плохой способ.


Согласен. Это лишний контрол в проекте. К тому же обязательно нужна форма, что не всегда приемлимо. Sleep - идеальный вариант

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

Сообщение MEMBER » 20.06.2003 (Пт) 17:50

Sleep, при всей его хорошести, замораживает форму полностью, что не гуд.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Mirus
Бывалый
Бывалый
 
Сообщения: 259
Зарегистрирован: 09.12.2001 (Вс) 18:25
Откуда: Russia

Сообщение Mirus » 20.06.2003 (Пт) 23:35

Код: Выделить всё
Option Explicit
Private Declare Function MsgWaitForMultipleObjects Lib "user32" (ByVal nCount As Long, pHandles As Long, ByVal fWaitAll As Long, ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Const QS_ALLINPUT = (&H40& Or &H20& Or &H10& Or &H8& Or &H4& Or &H2& Or &H80& Or &H1&)
Public Function Pause(Interval As Long) As Long
Dim Tstart As Long, Tend As Long
Tstart = GetTickCount() + Interval
Do
    Tend = Tstart - GetTickCount()
    If Tend < 0 Then Exit Function
    Call MsgWaitForMultipleObjects(0, 0, 0, Tend, QS_ALLINPUT)
    DoEvents
Loop
End Function
:idea:Пактически не ест процессорного времени и не замораживает форму как Sleep :!:
Mirus

goro
Постоялец
Постоялец
 
Сообщения: 494
Зарегистрирован: 03.12.2002 (Вт) 11:45
Откуда: Украина, Запорожье

Сообщение goro » 21.06.2003 (Сб) 0:16

Mirus писал(а): :idea:Пактически не ест процессорного времени и не замораживает форму как Sleep :!:

Классная фича! :mrgreen:
ПРЕВЕД

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 21.06.2003 (Сб) 7:18

Так примитивно, но тоже ничего не тормозит и не ест ресурсы:

Dim i As Long
For i = 0 To 10000000
DoEvents
Sleep 1
Next i

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 21.06.2003 (Сб) 11:45

С засыпанием и WaitFor... есть один неприятный момент

МОжно не получить нужный Event((((

Как сказал чел, который толстую книку про АПИ написал

Каждое решение хорошо только в контекте выполняемой задачи!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

PSV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 29.01.2002 (Вт) 12:30
Откуда: Россия

Сообщение PSV » 21.06.2003 (Сб) 17:47

В исходниках кнопок axButton на сайте vbStreets.ru есть модуль для организации таймеров в коде (судя по комметариям взятый где то у MS).

Для мега-маньяков на vbAccelerator.com есть компнент с исходниками для использования мультимедийного таймера с РЕАЛЬНЫМ мин. интервалом 1ms.

Alex_new_2030
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 118
Зарегистрирован: 20.02.2003 (Чт) 8:00
Откуда: Kazakhstan

Сообщение Alex_new_2030 » 23.06.2003 (Пн) 7:12

А если так:

sub zad(n)
t=timer
while (t+n)>timer:wend
end sub



Call zad(1.3) 'Задержка на 1300 милисекунд

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Сообщение KDima » 25.02.2005 (Пт) 13:58

Alex_new_2030 писал(а):А если так:

sub zad(n)
t=timer
while (t+n)>timer:wend
end sub



Call zad(1.3) 'Задержка на 1300 милисекунд


Хм... А DoEvents? Пример Mirus'a покруче будет...
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 25.02.2005 (Пт) 14:53

KDima писал(а):Хм... А DoEvents?

Интересно, кому тогда нужна задержка? :?
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 25.02.2005 (Пт) 16:07

Alex_new_2030 писал(а):А если так:

sub zad(n)
t=timer
while (t+n)>timer:wend
end sub



Call zad(1.3) 'Задержка на 1300 милисекунд


А если внимательно вопрос прочитать??
...без пустых циклов...


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 40

    TopList