Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Временая задержка в VB6 / 25 сообщений из 30, страница 1 из 2
28.05.2005, 15:44
    #33088976
depeche555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Как сделать задержку в программе секунд на 10?!!Ничего нигде не написано,а вроде так просто...Заранее спасибо!
...
Рейтинг: 0 / 0
28.05.2005, 15:57
    #33088989
BusyMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
используя Win32 API

Для поиска: DELAY

P.S. Можно просто Бизик, admin@busyman.ru
...
Рейтинг: 0 / 0
29.05.2005, 10:27
    #33089306
Андрей Il
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Код: plaintext
1.
2.
3.
4.
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load()
    Sleep  10000  'Засыпаем на 10 сек.
End Sub
...
Рейтинг: 0 / 0
01.06.2005, 10:41
    #33094115
under
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
BusyManиспользуя Win32 API

Для поиска: DELAY

P.S. Можно просто Бизик, admin@busyman.ru

это на паскале Дилей .... А это барсик....тут слип ....
...
Рейтинг: 0 / 0
03.06.2005, 14:23
    #33099825
AGAT7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
А может ипробовать стандартную Wait

Код: plaintext
1.
2.
If Application.Wait(Now + TimeValue("0:00:10")) Then
    MsgBox "Time expired"
End If
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.05.2008, 03:04
    #35336294
Андрей Гр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Привет всем!
У меня похожая задача, только мне нужно задавать частоту следования импульсов. Я работаю только в Visual Basic'e и сильно ограничен во времени для изучения более мощных языков. Мне нужно управлять шаговым дигателем. Я сделал программку со Sleep'ом, но меня не устраивает достигнутая частота, поскольку получил только 10-15 Гц. Кто может помочь разобраться со Sleep'ом или предлодить другой вариант, как можно на LPT полчить приемлимую частоту следования импульсов 10-50 кГц ну или хотябы 100 Гц. Был бы рад аже ссылке.
В порт вывожу так:
Out& H378, (число для включения необходимого пина)
Sleep 1
С уважением Андреу.
...
Рейтинг: 0 / 0
30.10.2008, 12:47
    #35625261
guest637
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
AGAT7А может ипробовать стандартную Wait

If Application.Wait(Now + TimeValue("0:00:10")) Then
MsgBox "Time expired"
End If СПАСИБО ! РАБОТАЕТ ! ТО ЧТО НУЖНО !
...
Рейтинг: 0 / 0
30.10.2008, 19:42
    #35626492
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Можно создать свою функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Command1_Click()
  Call WBSleep( 5 ) ' Задержка 5 секунд
End Sub
Private Function WBSleep(TmpPause As Long)
  Dim Ti As Long
  Ti = Timer
  Do
   ' DoEvents ' эту строчку можно удалить
   ' Form1.Caption = Timer - Ti ' эту строчку можно удалить
  Loop While Ti + TmpPause >= Timer
  ' MsgBox "Задержка " + Str(TmpPause) + " секунд"  ' эту строчку можно удалить
End Function
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.08.2010, 23:51
    #36804705
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Решил не плодить свою тему, т.к. вопрос такой же.
Ну например
1) есть ProgressBar и по достижении MaxValue хочется задержать взгляд юзера на секундочку
ЗАДЕРЖКА НЕ КРИТИЧНА
2) или например секунда-другая жизненно необходима для переиниализации чего-нибудь, чем VB управляет.
ЗАДЕРЖКА КРИТИЧНА

По жизни пользовался своей ф-цией типа той что в предыдущем посте.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Sub DoSleep(msec As Long)
    Dim ltime As Single
    Dim m_pause As Single
    'пауза msec (в миллисекундах)
    m_pause = msec /  1000 
    ltime = Timer()
    Do
        DoEvents
        If (Timer - ltime > m_pause) Or (Timer < ltime) Then 'пауза не срабатывает лишь при переходе суток
            Exit Do
        End If
    Loop
End Sub
По сути тоже что и в предыдущем посте.
Слабое место этого кода в
Or (Timer < ltime)
Но если этого не делать, то в полночь можно зависнуть. (верояность мала, но один раз "попал")

"Поумнев", решил использовать чего-нибудь "поумнее".
Код: plaintext
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
И накололся похоже. Работать то оно работает, но похоже , это ощущения, но кажется это так... что-то портит в системе.
Т.е. если этот Sleep раз сработал, то у меня перестает работать нек. фича(независимая): С++ программа которая следит за активностью установки plug_and_play драйверов(должна выйти по окончанию процесса установки), уж не знаю как устроена, но ведет себя некорректно и начинает выходить раньше времени. Причем программа со Sleep() уже давно отработала и закрыта, а последствия не устраняются до перезагрузки.

Т.е. чутье подсказывает что Sleep() лучше не использовать? Да и на Microsoft есть намеки на то что не стоит.
http://msdn.microsoft.com/en-us/library/ms686298(VS.85).aspx

Остается вариант
If (Timer - ltime > m_pause) Or (Timer < ltime)
полночь конечно не критично если ЗАДЕРЖКА НЕ КРИТИЧНА
но если это случай ЗАДЕРЖКА КРИТИЧНА может таки глюкануть
Если скажем запущено 5-10 циклических процессов, в каждом из которых применяется пауза в 2-3 секунды между циклами по 1-2минуты, то вероятность что в полночь кто-то попадет в паузу и пауза не сработает таки не нулевая.

Чего б придумать понадежней для задержки?
...
Рейтинг: 0 / 0
22.08.2010, 10:33
    #36804812
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Дмитрий77то в полночь можно зависнуть. (верояность мала, но один раз "попал")

Дмитрий, если я правильно понял, ты уперся в отсутствие возможности работась с миллисекундами в DateAdd
Могу предложить такой простенький способ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub DoSleep(msec As Long)

Dim d As Date
d = Now + msec *  0 . 00000001157407 
Do While Now < d
  DoEvents
Loop

End Sub
...
Рейтинг: 0 / 0
22.08.2010, 10:41
    #36804818
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Вероятно, в моей функции есть недостаток - может набежать погрешность округления при очень больших значениях msec (десятки секунд). Если это имеет принципиальное значение, можно комбинировать DateAdd (для секунд) и мой способ для долей секунд.

вот, кстати, константа в Double (для уменьшения погрешности)
Код: plaintext
 1 .15740740740741E- 08 
...
Рейтинг: 0 / 0
22.08.2010, 14:26
    #36804931
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Shocker.ProВероятно, в моей функции есть недостаток
нету
расчеты показывают, что для погрешности в 1 ms нужно задать интервал в 13тыщ лет, который не влезет в свою очередь во входной параметр Long
...
Рейтинг: 0 / 0
22.08.2010, 14:31
    #36804934
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Shocker.ProДмитрий, если я правильно понял, ты уперся в отсутствие возможности работась с миллисекундами в DateAdd
О DateAdd я как-то вообще не думал.
Да можно и Вашу использовать, можно и мою DoSleep допилить.
Например
запоминать положительные (Timer - ltime)
но перед этим проверять
(Timer < ltime)
если вдруг сработало, то выход из цикла и запуск другого такого же цикла на оставшееся время.

Для визуальной задержки по достижении макс. значения ProgressBar (для чего мне сейчас это понадобилось) мне даже моей
Sleep(1000) с головой хватит, а эффект полуночи, ну не будет задержки, не критично..инсталлятор не сломается.
Даже миллисекунды не нужны,можно было и не извращаться с делением на 1000.

Странно другое, что не существует нормальной корректной штатной функции VB или API, чтоб не думать как придумать с точностью константы или с обходом эффекта полуночи.
Потому как API-шная Sleep() точно глючная, и кажется еще на Висте не работает. Как только заменил на свой примитив, "спецэффекты" с влиянием на другие программы прекратились.
VOID WINAPI SleepBe careful when using Sleep in the following scenarios:

Code that directly or indirectly creates windows (for example, DDE and COM CoInitialize). If a thread creates any windows, it must process messages. Message broadcasts are sent to all windows in the system. If you have a thread that uses Sleep with infinite delay, the system will deadlock.
Threads that are under concurrency control. For example, an I/O completion port or thread pool limits the number of associated threads that can run. If the maximum number of threads is already running, no additional associated thread can run until a running thread finishes. If a thread uses Sleep with an interval of zero to wait for one of the additional associated threads to accomplish some work, the process might deadlock.

For these scenarios, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than Sleep.
Спасибо майкрософту конечно за заботу, но MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx слишком кажется наворочены, чтоб пытаться их осознать с т.зрения таких простых задач как задержка в VB-коде.
...
Рейтинг: 0 / 0
29.01.2011, 21:58
    #37086373
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
AGAT7А может ипробовать стандартную Wait

If Application.Wait(Now + TimeValue("0:00:10")) Then
MsgBox "Time expired"
End If

Как его использовать в vbs скрипте ?
...
Рейтинг: 0 / 0
30.01.2011, 01:13
    #37086574
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
GabitAGAT7А может ипробовать стандартную Wait

If Application.Wait(Now + TimeValue("0:00:10")) Then
MsgBox "Time expired"
End If

Как его использовать в vbs скрипте ?
подключить и запустить ворд или эксель.... только зачем...
...
Рейтинг: 0 / 0
30.01.2011, 10:02
    #37086648
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
В VBS:
Код: plaintext
WScript.Sleep [Количество_Миллисекунд]
...
Рейтинг: 0 / 0
10.02.2011, 17:14
    #37109761
Dick Johnson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
У меня такая задача:
В цикле отправляется письма клиентам. Что бы всякие яндексы не посчитали за спамеров, письма должны отправляться с некоторой задержкой (30-50 секунд). Нормально справлялась функция Sleep. Но когда добавилось требование "Добавить кнопку отмена. Что бы посреди рассылки можно было передумать."
Пробовал использовать вот такую функцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Function WBSleep(TmpPause As Long)
  Dim Ti As Long
  Ti = Timer
  Do
    DoEvents
  Loop While Ti + TmpPause >= Timer
End Function
По идее DoEvents должна передавать управление ОС и позволить кликнуть на кнопку отмены. Но что-то не получается. Кликнуть на кнопку не выходит.

ЧЯДНТ? Чем лучше в моем случае воспользоваться?
...
Рейтинг: 0 / 0
10.02.2011, 17:18
    #37109769
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Код: plaintext
Dim Ti As Single
...
Рейтинг: 0 / 0
10.02.2011, 17:47
    #37109846
Dick Johnson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Konst_One
Код: plaintext
Dim Ti As Single

Не помогло. Хотя так наверное правильнее будет.

вот так у меня выглядят основные части:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub cmdSendAll_Click()
    Dim i As Integer
    For i =  1  To emlList.rows -  1 
            If isStop Then Exit For 
            Call SendEml(emlList.TextMatrix(i,  2 ))
            WBSleep  50 
    Next i
End Sub

Private Sub cmdStop_Click()
    isStop = True
End Sub

Private Function WBSleep(TmpPause As Long)
  Dim Ti As Single
  Ti = Timer
  Do
    DoEvents
  Loop While Ti + TmpPause >= Timer
End Function

Т.е. в моем понимании за те 50 секунд что отправка простаивает у пользователя должно быть время кликнуть на кнопку "Отмена". Событие cmdStop_Click отработает глобальной переменной isStop присвоится True, и после выхода из WBSleep на следующем шаге цикла программа из него выходит.
Я что-то неправильно понимаю? может дело не в цикле "сна"?
Я проверял: ставил брейк внутри cmdStop_Click, так туда вообще не заходит. Т.е. событие Click для кнопки не отрабатывается.
...
Рейтинг: 0 / 0
10.02.2011, 17:56
    #37109861
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
так отправка то у вас в другой процедуре или я логику вашу не понял
...
Рейтинг: 0 / 0
10.02.2011, 18:15
    #37109892
Dick Johnson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Konst_Oneтак отправка то у вас в другой процедуре или я логику вашу не понял
Ну, да.
в цикле вызывается процедура отправки. после отправки встает на паузу на 50 секунд. Потом переходит к следующему адресату.
Хотелось бы что бы в течении 50 секунд до перехода к следующему адресату, была возможность кликнуть на "Отмену"
...
Рейтинг: 0 / 0
10.02.2011, 18:33
    #37109921
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Dick JohnsonЯ проверял: ставил брейк внутри cmdStop_Click, так туда вообще не заходит. Т.е. событие Click для кнопки не отрабатывается
У меня отрабатывает нормально.
Плюс можно добавить ещё в условие цикла:
Код: plaintext
Loop While Ti + TmpPause >= Timer And Not isStop
...
Рейтинг: 0 / 0
10.02.2011, 18:44
    #37109940
Dick Johnson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
VSVLADDick JohnsonЯ проверял: ставил брейк внутри cmdStop_Click, так туда вообще не заходит. Т.е. событие Click для кнопки не отрабатывается
У меня отрабатывает нормально.
Плюс можно добавить ещё в условие цикла:
Код: plaintext
Loop While Ti + TmpPause >= Timer And Not isStop

Вот я и хочу понять ЧЯДНТ? почему у меня вообще никак не реагирует на клик мыши. Да и вообще ест ьощущение, что управление в ОС не передается. Форма ни начто вообще не реагирует.
...
Рейтинг: 0 / 0
10.02.2011, 18:52
    #37109949
Dick Johnson
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Dick JohnsonVSVLADпропущено...

У меня отрабатывает нормально.
Плюс можно добавить ещё в условие цикла:
Код: plaintext
Loop While Ti + TmpPause >= Timer And Not isStop

Вот я и хочу понять ЧЯДНТ? почему у меня вообще никак не реагирует на клик мыши. Да и вообще ест ьощущение, что управление в ОС не передается. Форма ни начто вообще не реагирует.
Понял.
Прошу прощение у всех, кто тратил время и мысленные усилия на решение моего вопроса.
Я сам себе злобный буратина - поставил в одной из функций me.enabled = false Зачем и когда уже не помню. Вот и морочил голову себе и вам.
п.с. Ненавижу доделывать что-то что писалось 100 лет назад...
...
Рейтинг: 0 / 0
17.02.2011, 16:10
    #37122801
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временая задержка в VB6
Андрей Il
Код: plaintext
1.
2.
3.
4.
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load()
    Sleep  10000  'Засыпаем на 10 сек.
End Sub

Я немного по другому делаю
Код: plaintext
1.
2.
3.
4.
5.
6.
sub WaiT(t as integer)
for i= 0  to t
Sleep  10 
DoEvents
next
end sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Временая задержка в VB6 / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]