Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443

Как программно создать таймер?

08.03.2020, 22:17. Показов 4993. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Перепробовал уже много всяких вариантов (с New и без New) и никак не получается
В интернете постоянно подсовывают варианты из VB.NET.

Вот варианты, которые пробовал и ещё много других:
Visual Basic
1
2
3
4
Sub Main()
    Dim Timer1 As Timer
    Set Timer1 = Timer
End Sub
Visual Basic
1
2
3
Sub Main()
    Dim Timer1 As New Timer
End Sub
Visual Basic
1
2
3
4
Sub Main()
    Dim Timer1 As Control
    Set Timer1 = Timer
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2020, 22:17
Ответы с готовыми решениями:

Как создать долгосрочный таймер?
как создать таймер чтобы прога после (к примеру 20 апреля 2003 году)неработала

Как создать таймер без формы в модуле класса?
Я пытаюсь создать таймер в модуле класса на VB5. Пишем в секции General Public WithEvents tmr As Timer Описывывем событие tmr_Timer()...

Как программно создать обьект в VB?
Как програмно создать обьект в VB,например Label?

31
Эксперт по электронике
7237 / 3415 / 348
Регистрация: 28.10.2011
Сообщений: 13,445
Записей в блоге: 7
14.03.2020, 20:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от The trick Посмотреть сообщение
А зачем тогда таймер если будет Sleep?
В названии темы речь про таймер. Как был задан вопрос, так и ответили.
Действительно, в данном случае вместо таймера можно использовать цикл со Sleep.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Слово "Нужна." как понимать?
А после заметили слово "Точнее" и следующие за ним? Я уточнил что я имел в виду. Про форму или окно я ничего не писал.
0
14.03.2020, 20:15

Не по теме:

locm, я не наезжаю если что, я просто уточнил.

0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
14.03.2020, 21:56
Цитата Сообщение от Power_Basic Посмотреть сообщение
е, ну если бы я был таким профессионалом, что мог запроста воспринимать на слух такие сложные словесные формулы "цикл прокачки сообщений который не будет грузить поток", тогда бы я вообще никому не задавал никаких вопросов на этом форуме
Если Вам подошел код Pro_grammer'а, то Вам и таймер скорее всего не нужен. Просто используйте Sleep в цикле с нужным интервалом (DoEvents только в отладке используйте). Цикл прокачки нужен если помимо таймера Вам нужно также еще что-то обрабатывать. Простой цикл прокачки реализуется на 3 функциях (GetMessage, TranslateMessage, DispatchMessage).
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
14.03.2020, 22:44  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Если Вам подошел код Pro_grammer'а, то Вам и таймер скорее всего не нужен. Просто используйте Sleep в цикле с нужным интервалом (DoEvents только в отладке используйте).
Да, вполне устраивает для практических целей. Только, признаться, я даже как-то и не сообразил, что в конечном итоге мы обошлись без таймера вовсе Оригинальное решение!

Цитата Сообщение от The trick Посмотреть сообщение
Цикл прокачки нужен если помимо таймера Вам нужно также еще что-то обрабатывать. Простой цикл прокачки реализуется на 3 функциях (GetMessage, TranslateMessage, DispatchMessage).
А, ну да, приблизительно понимаю направление реализации такого подхода: с какой-то периодичностью отправляем сообщение (DispatchMessage), а потом в callback функции его отлавливаем (GetMessage, TranslateMessage) и вызываем функцию таймера.
Но это, конечно, уже очень глубоко в API надо влезать для этого, а я-то, когда начинал эту ветку, был почти уверен, что можно как-нибудь скомбинировать стандартные операторы, а я этого просто не знаю.

Visual Basic
1
2
3
4
Sub Main()
 Dim Timer1 As Timer   ' Один из пробных вариантов, которые не срабатывают
 Set Timer1 = Timer
End Sub
Ну буду, по крайней мере, знать, что это совсем не так просто, как мне изначально представлялось
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.03.2020, 05:33
Цитата Сообщение от The trick Посмотреть сообщение
Простой цикл прокачки реализуется на 3 функциях (GetMessage, TranslateMessage, DispatchMessage).
Можно и это сделать. Опять же, ни каких форм, окон и соответственно обработчик событий окна не требуется!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function GetMessage Lib "user32" Alias "GetMessageW" (lpMsg As msg, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
Public Declare Function TranslateMessage Lib "user32" (lpMsg As msg) As Long
Public Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageW" (lpMsg As msg) As Long
 
Const VK_SCROLL = &H91
Const KEYEVENTF_KEYUP = &H2
Const WM_TIMER = &H113
Public Type POINTAPI
    x   As Long
    y   As Long
End Type
Public Type msg
    hwnd    As Long
    message As Long
    wParam  As Long
    lParam  As Long
    time    As Long
    pt      As POINTAPI
End Type
 
Sub Main()
Dim msg As msg
Dim ret As Long
MsgBox "Timer On"
SetTimer 0, 0, 200, 0
Do
ret = GetMessage(msg, 0, 0, 0)
        If ret = -1 Or ret = 0 Then Exit Do
        Select Case msg.message
        Case WM_TIMER
            TimerProc
        Case Else
            TranslateMessage msg
            DispatchMessage msg
        End Select
'Sleep 100
Loop
End Sub
Sub Scroll_LockOnOff()
  Call keybd_event(VK_SCROLL, 0, 0, 0)
  Call keybd_event(VK_SCROLL, 0, KEYEVENTF_KEYUP, 0)
End Sub
 
Sub TimerProc()
Win = GetForegroundWindow         ' Получаем активное окно.
Thread = GetWindowThreadProcessId(Win, 0) ' Получаем поток активного окна.
 
R = GetKeyboardLayout(Thread)
' раскладка EN индикатор не горит
If R = 67699721 And GetKeyState(VK_SCROLL) > 0 Then Scroll_LockOnOff
' раскладка RU индикатор  горит
If R <> 67699721 And GetKeyState(VK_SCROLL) = 0 Then Scroll_LockOnOff
End Sub
Без Sleep всё же цикл незначительно отбирает процессорное время, порядка 0.03%.
2
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
15.03.2020, 13:50  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Можно и это сделать. Опять же, ни каких форм, окон и соответственно обработчик событий окна не требуется!
Попробовал, в такой редакции код тоже работает исправно, но я всё-таки буду исходить из предыдущего варианта хотя бы потому, что там мне всё понятно

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Без Sleep всё же цикл незначительно отбирает процессорное время, порядка 0.03%.
У меня даже и без "слипа" Диспетчер задач постоянно показывает ровно ноль процентов загрузки процессора безо всяких сотых долей, и это даже если интенсивно переключать раскладку много раз подряд.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.03.2020, 14:37
Цитата Сообщение от Power_Basic Посмотреть сообщение
Диспетчер задач постоянно показывает ровно ноль
Я использую process explorer, он более чувствительный, показывает сотые доли процента.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
15.03.2020, 21:46
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Можно и это сделать. Опять же, ни каких форм, окон и соответственно обработчик событий окна не требуется!
Да здесь вообще не нужен таймер, соответственно и не нужен цикл прокачки сообщений.

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Без Sleep всё же цикл незначительно отбирает процессорное время, порядка 0.03%.
Смысла нет в одновременном использовании цикла прокачки и Sleep.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
15.03.2020, 23:11
Цитата Сообщение от The trick Посмотреть сообщение
Да здесь вообще не нужен таймер
Это понятно, и уже было показано.
Но это название темы, а посему и пример с таймером.
Цитата Сообщение от The trick Посмотреть сообщение
Для использования таймера нужен цикл прокачки сообщений.
Вот потому и прокачка сообщений
Всё логично в рамках раскрытия вопроса темы.
Цитата Сообщение от The trick Посмотреть сообщение
Смысла нет в одновременном использовании цикла прокачки и Sleep.
А кто ищет в этом смысл? У меня в коде его и нет.
0
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
16.03.2020, 14:55  [ТС]
Pro_grammer и The trick, большое спасибо вам обоим за помощь!
Тема раскрыта полностью, поскольку подразумевалось, что хотелось бы создать таймер программно, без привязки его к форме, ну и в конечном счёте именно это мы и получили. "Самодельный" таймер, полученный в результате вот по такой схеме ...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Sub Main()
    Do
        sub_DoSmth
        DoEvents
        Sleep 200
    Loop
End Sub
 
Sub sub_DoSmth()
    MsgBox "OK"
End Sub
... меня вполне устраивает.

По специфике данной программы выход из цикла не требуется совсем и отладка тоже будет минимальной. Эта утилита автостартует при запуске компьютера и заканчивает свою работу при его отключении, ну это и есть выход из цикла

Ну а всё остальное будет сделано точно по схеме Pro_grammer'а.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
17.03.2020, 01:27
Рекомендую обратить внимание на функцию SetWaitableTimer

Эта функция появилась в Windows NT 4.0. Она позволяет активировать таймер, который через заданный период времени в 100-наносекундных интервалах или при наступлении заданного абсолютного времени переходит в сигнальное состояние. Кроме этого, можно указать процедуру завершения, которая будет вызвана с помощью APC-запроса в данном потоке. Для процедуры завершения можно указать дополнительный параметр. Функция хороша тем, что она не привязана к окнам и циклу выборки сообщений, как, например, SetTimer. С её помощью можно использовать таймеры в любых приложениях, включая консольные и сервисы.
1
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443
17.03.2020, 15:40  [ТС]
Цитата Сообщение от Замабувараев Посмотреть сообщение
Рекомендую обратить внимание на функцию SetWaitableTimer
Спасибо, конечно, за совет, но было бы неплохо увидеть какой-нибудь простенький примерчик на Визуальном бейсике
Нашёл эту функцию на сайте Майкрософт. Принимает 6 параметров. Что туда пихать-то надо, чтобы оно заработало?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2020, 15:40

Как программно создать DSN?
Или подскажите как быть после того, как я создам дистрибутив, мне что DSN вручную прописывать на каждом компе?

Как программно создать 10 лабелов?
как программно создать 10 лабелов...?

Как программно создать файл .xls???
Можт кто знает как из VB создать *.xls??? черканите...

Как программно создать контрол UserControl?
Dim Path as string, I as object Path = &quot;VB.CommandButton&quot; Set I = Me.Controls.Add(Path, &quot;NewButton1&quot;) I.Visible = true Этот код...

Как создать базу на ADO программно?
где смотрел везде для DAO написано. Подскажите, где посмотреть.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru