Как перезапустить таймер в c
Перейти к содержимому

Как перезапустить таймер в c

  • автор:

Использование таймеров

В этом разделе показано, как создавать и уничтожать таймеры, а также как использовать таймер для перехвата входных данных с помощью мыши через указанные интервалы.

В этом разделе содержатся следующие подразделы.

  • Создание таймера
  • Уничтожение таймера
  • Использование функций таймера для перехвата входных данных с помощью мыши
  • Связанные темы

Создание таймера

В следующем примере функция SetTimer используется для создания двух таймеров. Первый таймер устанавливается каждые 10 секунд, второй — каждые пять минут.

// Set two timers. SetTimer(hwnd, // handle to main window IDT_TIMER1, // timer identifier 10000, // 10-second interval (TIMERPROC) NULL); // no timer callback SetTimer(hwnd, // handle to main window IDT_TIMER2, // timer identifier 300000, // five-minute interval (TIMERPROC) NULL); // no timer callback 

Чтобы обработать сообщения WM_TIMER , созданные этими таймерами, добавьте оператор WM_TIMER case в процедуру window для параметра hwnd .

case WM_TIMER: switch (wParam) < case IDT_TIMER1: // process the 10-second timer return 0; case IDT_TIMER2: // process the five-minute timer return 0; >

Приложение также может создать таймер, WM_TIMER сообщения которого обрабатываются не процедурой main окна, а определенной приложением функцией обратного вызова, как показано в следующем примере кода, который создает таймер и использует функцию обратного вызова MyTimerProc для обработки сообщений WM_TIMER таймера.

// Set the timer. SetTimer(hwnd, // handle to main window IDT_TIMER3, // timer identifier 5000, // 5-second interval (TIMERPROC) MyTimerProc); // timer callback 

Соглашение о вызовах для MyTimerProc должно основываться на функции обратного вызова TimerProc .

Если приложение создает таймер без указания дескриптора окна, приложение должно отслеживать очередь сообщений на наличие WM_TIMER сообщений и отправлять их в соответствующее окно.

HWND hwndTimer; // handle to window for timer messages MSG msg; // message structure while (GetMessage(&msg, // message structure NULL, // handle to window to receive the message 0, // lowest message to examine 0)) // highest message to examine < // Post WM_TIMER messages to the hwndTimer procedure. if (msg.message == WM_TIMER) < msg.hwnd = hwndTimer; >TranslateMessage(&msg); // translates virtual-key codes DispatchMessage(&msg); // dispatches message to window > 

Уничтожение таймера

Приложения должны использовать функцию KillTimer для уничтожения таймеров, которые больше не нужны. В следующем примере удаляются таймеры, определяемые константами IDT_TIMER1, IDT_TIMER2 и IDT_TIMER3.

// Destroy the timers. KillTimer(hwnd, IDT_TIMER1); KillTimer(hwnd, IDT_TIMER2); KillTimer(hwnd, IDT_TIMER3); 

Использование функций таймера для перехвата входных данных с помощью мыши

Иногда при наличии указателя мыши на экране необходимо запретить дополнительный ввод. Один из способов сделать это — создать специальную подпрограмму, которая перехватывает ввод с помощью мыши до тех пор, пока не произойдет определенное событие. Многие разработчики называют эту процедуру «построением мышеловки».

В следующем примере используются функции SetTimer и KillTimer для перехвата входных данных с помощью мыши. SetTimer создает таймер, который отправляет WM_TIMER сообщение каждые 10 секунд. Каждый раз, когда приложение получает WM_TIMER сообщение, оно записывает расположение указателя мыши. Если текущее расположение совпадает с предыдущим расположением и окно main приложения свернуто, приложение перемещает указатель мыши на значок. Когда приложение закрывается, KillTimer останавливает таймер.

HICON hIcon1; // icon handle POINT ptOld; // previous cursor location UINT uResult; // SetTimer's return value HINSTANCE hinstance; // handle to current instance // // Perform application initialization here. // wc.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(400)); wc.hCursor = LoadCursor(hinstance, MAKEINTRESOURCE(200)); // Record the initial cursor position. GetCursorPos(&ptOld); // Set the timer for the mousetrap. uResult = SetTimer(hwnd, // handle to main window IDT_MOUSETRAP, // timer identifier 10000, // 10-second interval (TIMERPROC) NULL); // no timer callback if (uResult == 0) < ErrorHandler("No timer is available."); >LONG APIENTRY MainWndProc( HWND hwnd, // handle to main window UINT message, // type of message WPARAM wParam, // additional information LPARAM lParam) // additional information < HDC hdc; // handle to device context POINT pt; // current cursor location RECT rc; // location of minimized window switch (message) < // // Process other messages. // case WM_TIMER: // If the window is minimized, compare the current // cursor position with the one from 10 seconds // earlier. If the cursor position has not changed, // move the cursor to the icon. if (IsIconic(hwnd)) < GetCursorPos(&pt); if ((pt.x == ptOld.x) && (pt.y == ptOld.y)) < GetWindowRect(hwnd, &rc); SetCursorPos(rc.left, rc.top); >else < ptOld.x = pt.x; ptOld.y = pt.y; >> return 0; case WM_DESTROY: // Destroy the timer. KillTimer(hwnd, IDT_MOUSETRAP); PostQuitMessage(0); break; // // Process other messages. // > 

Хотя в следующем примере также показано, как перехватить ввод мыши, он обрабатывает сообщение WM_TIMER через определяемую приложением функцию обратного вызова MyTimerProc, а не через очередь сообщений приложения.

UINT uResult; // SetTimer's return value HICON hIcon1; // icon handle POINT ptOld; // previous cursor location HINSTANCE hinstance; // handle to current instance // // Perform application initialization here. // wc.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(400)); wc.hCursor = LoadCursor(hinstance, MAKEINTRESOURCE(200)); // Record the current cursor position. GetCursorPos(&ptOld); // Set the timer for the mousetrap. uResult = SetTimer(hwnd, // handle to main window IDT_MOUSETRAP, // timer identifier 10000, // 10-second interval (TIMERPROC) MyTimerProc); // timer callback if (uResult == 0) < ErrorHandler("No timer is available."); >LONG APIENTRY MainWndProc( HWND hwnd, // handle to main window UINT message, // type of message WPARAM wParam, // additional information LPARAM lParam) // additional information < HDC hdc; // handle to device context switch (message) < // // Process other messages. // case WM_DESTROY: // Destroy the timer. KillTimer(hwnd, IDT_MOUSETRAP); PostQuitMessage(0); break; // // Process other messages. // >// MyTimerProc is an application-defined callback function that // processes WM_TIMER messages. VOID CALLBACK MyTimerProc( HWND hwnd, // handle to window for timer messages UINT message, // WM_TIMER message UINT idTimer, // timer identifier DWORD dwTime) // current system time < RECT rc; POINT pt; // If the window is minimized, compare the current // cursor position with the one from 10 seconds earlier. // If the cursor position has not changed, move the // cursor to the icon. if (IsIconic(hwnd)) < GetCursorPos(&pt); if ((pt.x == ptOld.x) && (pt.y == ptOld.y)) < GetWindowRect(hwnd, &rc); SetCursorPos(rc.left, rc.top); >else < ptOld.x = pt.x; ptOld.y = pt.y; >> > 

How do I reset a TIMER?

Im trying to make a reaction game. I have a grafic that comes up, and the timer starts and when i hit the grafic the timer stops. But my problem is that the Timer doesn’t reset.
Can anybody help me? 😀

what timer are you talking about?

I’m not quite sure. but I made ​​it to reset. but now my problem that I do not get it to measure the seconds. This is the code. you see the error?

var minTimer:Timer = new Timer(1);
minTimer.addEventListener(TimerEvent.TIMER, timer);
btnStart.addEventListener(MouseEvent.CLICK, Start);
btnIgjen.addEventListener(MouseEvent.CLICK, Start);
btnIgjen.visible=false // gj�r pr�vigjen knappen usynlig
btnIgjen.enabled = false // kobbler ut knappen
function Start(evt:MouseEvent)

minTimer.start(); // starter «stoppeklokken»
btnStart.visible = false; // gj�r start knappen usynlig
btnStart.enabled = false; // kobbler ut startknappen
skiMann.x = 100 + (350 * Math.random()); // Beveger objektet random borter(x)
skiMann.y = 100 + (300 * Math.random()); // Beveger objektet random oppover(y)
btnIgjen.visible=false
btnIgjen.enabled = false

>
function timer (evt:TimerEvent)
new Timer = 1000;
var reaksjonstid:Number = minTimer.currentCount/100 //
trace(reaksjonstid)
txtResultat.text = «Din reaksjonstid er » + String(reaksjonstid.toFixed(2)) + » sekunder»; // f�r tiden ut i et tekstvindu

skiMann.addEventListener(MouseEvent.CLICK, klikk) // lager en «Click» funksjon p� symbolet skimann
function klikk(evt:MouseEvent)

minTimer.reset() // resetter timeren n�r du trykker p� skimannen.
minTimer.stop(); // stopper timeren n�r du trykker p� skimannen
btnIgjen.visible=true;
btnIgjen.enabled = true

Как перезапустить таймер по кнопке

Есть код таймера всё отлично только не знаю как сделать чтобы по кнопке которую я задам он перезапускался введите сюда описание изображения введите сюда описание изображения

 jQuery(document).ready(function($) < $('.send-new-code-button').click(function(event) < $('.send-new-code').show(); $('.sent-to-number').show(); (function(d)< var display = d.querySelector('#countdown .display') // меняющаяся цифра var timeLeft = parseInt(display.innerHTML) // оставшееся время var timer = setInterval(function()< if (--timeLeft >= 0) < // если таймер всё еще больше нуля display.innerHTML = timeLeft // обновляем цифру >else < d.querySelector('#countdown h1').style.display = 'none' // прячем теекст d.querySelector('.send-new-code').style.display = 'none' // прячем теекст d.querySelector('.sent-to-number').style.display = 'none' // прячем теекст d.querySelector('.send-new-code-button').style.display = 'inline-block' // показываем кнопку clearInterval(timer) // удаляем таймер >>, 1000) // таймер срабатывает каждые 1000 msec (1 sec) >)(document) >); >); 

Отслеживать
задан 22 фев 2019 в 9:10
33 3 3 бронзовых знака
Код в виде картинок — это жесть конечно. Вам трудно скопипастить текст кода?
22 фев 2019 в 9:14
«чтобы по кнопке которую я задам» — ??
– user176262
22 фев 2019 в 14:45
да мне надо чтобы при клике с каким то class таймер запускался снова
22 фев 2019 в 17:21

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Для перезапуска таймера нужно где-либо хранить его идентификатор (возвращаемый функциями setTimeout и setInterval ) и в нужном месте (обработчике кнопки, например) отменять его (через clearTimeout или clearInterval ) и запускать заново.

Отслеживать
ответ дан 22 фев 2019 в 11:31
381 1 1 золотой знак 3 3 серебряных знака 14 14 бронзовых знаков
Можете помочь с этим.В JS не силен
22 фев 2019 в 12:19

  • javascript
  • jquery
  • таймер
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.2.14.4854

Как перезапустить таймер

Author24 — интернет-сервис помощи студентам

А не мог бы кто-нибудь подсказать, что произойдет с таймером, если выполнить Timer.Start(), когда таймер уже запущен (ожидаю перезапуск таймера, но проверить пока негде).

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как перезапустить explorer через команду?
Есть ли способ обновить/перезапустить explorer.exe безобидным способом, чтобы открытые приложения.

Как перезапустить таймер T0 на 2313?
Подскажите пож, как произвольно перезапускать таймер T0 на tiny2313? просто PSR10_bit:= 1; не.

Перезапустить таймер
Доброе время суток. Подскажите пожалуйста, как перезапустить таймер? Есть label18 в котором идет.

Как перезапустить форму?
Всем привет.Вопрос следующий: у меня есть форма и мне надо ,чтоб пользователь по нажатию на кнопку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *