Как отменить settimeout в js
Для отметы setTimeout() есть специальная функция clearTimeout() . Она принимает на вход идентификатор таймаута, который возвращает setTimeout() и останавливает таймер (переданный колбэк не выполнится).
// запускаем таймер const timerId = setTimeout(() => console.log('hello!'), 1000); // останавливаем таймер clearTimeout(timerId);
Не смотря на то, что есть ещё функция clearInterval() , которая тоже может остановить таймер точно таким же образом, всё же лучше использовать для остановки таймера именно clearTimeout() , т.к. именно эта функция предназначена для остановки таймера.
Как остановить таймер js
Откуда программа знать будет, когда мне надо таймер остановить? Нашёл ответ у господина Трепачёва Д.
09 августа 2022
Для отметы таймера, запущенного с помощью setTimeout() , есть специальная функция clearTimeout() . Она принимает на вход идентификатор таймаута, который возвращает setTimeout() и останавливает таймер (переданный колбэк не выполнится).
// запускаем таймер const timerId = setTimeout(() => console.log('hello!'), 1000); // останавливаем таймер clearTimeout(timerId);
Для отмены интервала, запущенного с помощью setInterval() , есть схожая функция clearInterval()
// запускаем интервал const timerId = setInterval(() => console.log('hello!'), 1000); // останавливаем clearInterval(timerId);
Не смотря на то, что функции clearTimeout() и clearInterval() , рабоают схожим образом и взаимозаменяемы, всё же лучше использовать каждую функцию по своему назначению, то есть с помощью clearTimeout() останавливать таймаут, а clearInterval() останавливать интервал.
Технические вопросы
Уважаемые администраторы системы Moodle
Подскажите пожалуйста , кто нибудь из вас сталкивался с ситуацией, что нужно останавливать время прохождения теста для конкретного сдающего?
пример: проходит удаленное тестирование. в определенный момент времени у Иванова и Петрова пропадает свет или связь. Тест они проходить не могут а ограничение по времени у них в силе. Свет появляется, а у них незаконченная попытка 20 вопросов из 100. Нужно продолжать попытку а не проходить тест заново.
Сумма оценок: —
В ответ на Andrey Ete
Re: Остановка времени теста
от Evgeniy Schuetz — среда, 5 сентября 2018, 18:19
По-моему — никак. Попытка сдачи теста привязывается к текущей сессии, как только сессия прерывается, то попасть в не не получится. По ситуации, что вы описали, рекомендую посмотреть логи у этих студентов с «пропаданием света» в моменты «пропадания».
Сумма оценок: —
Постоянная ссылка Показать сообщение-родителя Ответить
В ответ на Andrey Ete
Re: Остановка времени теста
от Vadim Dvorovenko — воскресенье, 9 сентября 2018, 21:53
Ваша ситуация не универсальна, поэтому штатного средства нет. Если у студента мало заданий, каждое из которых требует долгого решения, студент мог сначала посмотреть задания, и начать их решать. Если увеличить ему время, пусть из-за пропадающей связи, то он получит преимущество перед другими студентами.
Вы можете попробовать вручную сделать переопределение настроек теста для конкретного студента установить большее время теста. Возможно оно подействует, даже если сеанс тестирование уже начат.
Вообще, используйте мобильно приложение moodle — устройство будет защищено от пропажи электроэнергии. Мобильное приложение загружает тест заранее, и позволяет тестироваться, даже если пропадает связь. И даже если в момент окончания теста связи не будет, тест закончится и приложение его отправит.
Timer. Stop Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
public: void Stop();
public void Stop ();
member this.Stop : unit -> unit
Public Sub Stop ()
Примеры
В следующем примере кода реализуется простой таймер интервала, который создает сигнал тревоги каждые пять секунд. При возникновении будильника MessageBox отображается количество запусков оповещения и выводится запрос на продолжение работы таймера.
public ref class Class1 < private: static System::Windows::Forms::Timer^ myTimer = gcnew System::Windows::Forms::Timer; static int alarmCounter = 1; static bool exitFlag = false; // This is the method to run when the timer is raised. static void TimerEventProcessor( Object^ /*myObject*/, EventArgs^ /*myEventArgs*/ ) < myTimer->Stop(); // Displays a message box asking whether to continue running the timer. if ( MessageBox::Show( "Continue running?", String::Format( "Count is: ", alarmCounter ), MessageBoxButtons::YesNo ) == DialogResult::Yes ) < // Restarts the timer and increments the counter. alarmCounter += 1; myTimer->Enabled = true; > else < // Stops the timer. exitFlag = true; >> public: static void Main() < /* Adds the event and the event handler for the method that will process the timer event to the timer. */ myTimer->Tick += gcnew EventHandler( TimerEventProcessor ); // Sets the timer interval to 5 seconds. myTimer->Interval = 5000; myTimer->Start(); // Runs the timer, and raises the event. while ( exitFlag == false ) < // Processes all the events in the queue. Application::DoEvents(); >> >; int main()
public class Class1 < static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); static int alarmCounter = 1; static bool exitFlag = false; // This is the method to run when the timer is raised. private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs) < myTimer.Stop(); // Displays a message box asking whether to continue running the timer. if(MessageBox.Show("Continue running?", "Count is: " + alarmCounter, MessageBoxButtons.YesNo) == DialogResult.Yes) < // Restarts the timer and increments the counter. alarmCounter +=1; myTimer.Enabled = true; >else < // Stops the timer. exitFlag = true; >> public static int Main() < /* Adds the event and the event handler for the method that will process the timer event to the timer. */ myTimer.Tick += new EventHandler(TimerEventProcessor); // Sets the timer interval to 5 seconds. myTimer.Interval = 5000; myTimer.Start(); // Runs the timer, and raises the event. while(exitFlag == false) < // Processes all the events in the queue. Application.DoEvents(); >return 0; > >
Public Class Class1 Private Shared WithEvents myTimer As New System.Windows.Forms.Timer() Private Shared alarmCounter As Integer = 1 Private Shared exitFlag As Boolean = False ' This is the method to run when the timer is raised. Private Shared Sub TimerEventProcessor(myObject As Object, _ ByVal myEventArgs As EventArgs) _ Handles myTimer.Tick myTimer.Stop() ' Displays a message box asking whether to continue running the timer. If MessageBox.Show("Continue running?", "Count is: " & alarmCounter, _ MessageBoxButtons.YesNo) = DialogResult.Yes Then ' Restarts the timer and increments the counter. alarmCounter += 1 myTimer.Enabled = True Else ' Stops the timer. exitFlag = True End If End Sub Public Shared Sub Main() ' Adds the event and the event handler for the method that will ' process the timer event to the timer. ' Sets the timer interval to 5 seconds. myTimer.Interval = 5000 myTimer.Start() ' Runs the timer, and raises the event. While exitFlag = False ' Processes all the events in the queue. Application.DoEvents() End While End Sub End Class
Комментарии
Вы также можете остановить таймер, задав свойству Enabled значение false . Объект Timer может быть включен и отключен несколько раз в рамках одного сеанса приложения.
Вызов Start после отключения Timer путем вызова Stop приведет Timer к перезапуску прерванного интервала. Timer Если задан интервал в 5000 миллисекунд и вы вызываете Stop около 3000 миллисекунд, вызов Start вызовет Timer ожидание 5000 миллисекунд перед вызовом Tick события.
Вызов stop в любом Timer из Windows Forms приложения может привести к немедленной обработке сообщений от других Timer компонентов приложения, так как все Timer компоненты работают в потоке приложения main. Если у вас есть два Timer компонента, один из которых имеет значение 700 миллисекунд, а другой — 500 миллисекунд, и вы вызываете Stop первый Timer, приложение может сначала получить обратный вызов события для второго компонента. Если это окажется проблематичным, рассмотрите Timer возможность использования класса в System.Threading пространстве имен.