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

Для поиска: DELAY

P.S. Можно просто Бизик, admin@busyman.ru
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #33089306
Андрей 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
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #33094115
under
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BusyManиспользуя Win32 API

Для поиска: DELAY

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

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

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

If Application.Wait(Now + TimeValue("0:00:10")) Then
MsgBox "Time expired"
End If СПАСИБО ! РАБОТАЕТ ! ТО ЧТО НУЖНО !
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #35626492
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно создать свою функцию
Код: 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
Период между сообщениями больше года.
Временая задержка в VB6
    #36804705
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил не плодить свою тему, т.к. вопрос такой же.
Ну например
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
Временая задержка в VB6
    #36804812
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий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
Временая задержка в VB6
    #36804818
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно, в моей функции есть недостаток - может набежать погрешность округления при очень больших значениях msec (десятки секунд). Если это имеет принципиальное значение, можно комбинировать DateAdd (для секунд) и мой способ для долей секунд.

вот, кстати, константа в Double (для уменьшения погрешности)
Код: plaintext
 1 .15740740740741E- 08 
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #36804931
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProВероятно, в моей функции есть недостаток
нету
расчеты показывают, что для погрешности в 1 ms нужно задать интервал в 13тыщ лет, который не влезет в свою очередь во входной параметр Long
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #36804934
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Временая задержка в VB6
    #37086373
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AGAT7А может ипробовать стандартную Wait

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

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

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

Как его использовать в vbs скрипте ?
подключить и запустить ворд или эксель.... только зачем...
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #37086648
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VBS:
Код: plaintext
WScript.Sleep [Количество_Миллисекунд]
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #37109761
Dick Johnson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня такая задача:
В цикле отправляется письма клиентам. Что бы всякие яндексы не посчитали за спамеров, письма должны отправляться с некоторой задержкой (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
Временая задержка в VB6
    #37109769
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Dim Ti As Single
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #37109846
Dick Johnson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Временая задержка в VB6
    #37109861
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так отправка то у вас в другой процедуре или я логику вашу не понял
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #37109892
Dick Johnson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneтак отправка то у вас в другой процедуре или я логику вашу не понял
Ну, да.
в цикле вызывается процедура отправки. после отправки встает на паузу на 50 секунд. Потом переходит к следующему адресату.
Хотелось бы что бы в течении 50 секунд до перехода к следующему адресату, была возможность кликнуть на "Отмену"
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #37109921
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dick JohnsonЯ проверял: ставил брейк внутри cmdStop_Click, так туда вообще не заходит. Т.е. событие Click для кнопки не отрабатывается
У меня отрабатывает нормально.
Плюс можно добавить ещё в условие цикла:
Код: plaintext
Loop While Ti + TmpPause >= Timer And Not isStop
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #37109940
Dick Johnson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLADDick JohnsonЯ проверял: ставил брейк внутри cmdStop_Click, так туда вообще не заходит. Т.е. событие Click для кнопки не отрабатывается
У меня отрабатывает нормально.
Плюс можно добавить ещё в условие цикла:
Код: plaintext
Loop While Ti + TmpPause >= Timer And Not isStop

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

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

Вот я и хочу понять ЧЯДНТ? почему у меня вообще никак не реагирует на клик мыши. Да и вообще ест ьощущение, что управление в ОС не передается. Форма ни начто вообще не реагирует.
Понял.
Прошу прощение у всех, кто тратил время и мысленные усилия на решение моего вопроса.
Я сам себе злобный буратина - поставил в одной из функций me.enabled = false Зачем и когда уже не помню. Вот и морочил голову себе и вам.
п.с. Ненавижу доделывать что-то что писалось 100 лет назад...
...
Рейтинг: 0 / 0
Временая задержка в VB6
    #37122801
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей 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
25 сообщений из 30, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Временая задержка в VB6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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