Метод window.clearTimeout.
В прошлом уроке мы научились порождать потоки вычислений при помощи метода window.setTimeout(). Там мы разобрали пример, в котором время выводилось при помощи данного метода. Но, даже когда мы останавливали вывод времени на экран, внутренний счетчик продолжал идти. Сегодня мы научимся его останавливать при помощи метода window.clearTimeout.
window.clearTimeout — обнуление внутреннего счетчика.
Для прерывания потока вычислений, созданного методом window.SetTimeout используется window.ClearTimeout. Смысл этого метода может показаться вам несколько непонятным, но давайте вернемся к предыдущему примеру.
Если вы помните, то в прошлом уроке мы выводили на экран текущее время при помощи функции date(). Функция date()позволяет узнать время только в один единственный момент времени – в момент вызова самой функции, но нам требовалось чтобы время шло, как это и должно быть.
Для этого мы использовали метод window.settimeout, позволяющий нам многократно производить вызов функции date().
И все вроде бы нормально, но у нашей программы был один очень существенный нюанс. Когда мы нажимали на кнопку старт/стоп для остановки часов, мы всего навсего отменяли вывод времени на экран, но сами часы не останавливались. Потоки продолжали порождаться с задержкой в 500 мс, как это было бы, если бы мы и не нажимали на кнопку старт/стоп.
В нашем случае это не было существенной проблемой, ведь наша маленькая программка отнимала мизерное количество процессорного времени. Но в случаях, когда программы будут сложней и больше, такая небрежность может привести к торможению и даже полному зависанию системы.
Теперь вы поняли необходимость использования метода window.clearTimeout. Перейдем к примеру:
<script> var p1 = null; function start() { d = new Date(); window.document.c1.f1.value = d.getHours()+»:»+d.getMinutes()+ «:»+d.getSeconds(); p1=setTimeout(«start();»,500); } function stop() { clearTimeout(p1); p1=null; } </script> <FORM NAME=c1> Настоящее время: <INPUT NAME=f1 size=8> <INPUT TYPE=button VALUE=»Start» onClick=»if(p1==null)start();»> <INPUT TYPE=button VALUE=»Stop» onClick=»if(p1!=null)stop();»> </FORM> |
Созданная нами в этом примере программа является более грамотной, с точки зрения программирования на JavaScript, модификацией программы из предыдущего урока.
У нас есть две функции. Первая функция – start() – вызывает текущее время и заставляет его обновляться раз в 500 мс посредством метода window.settimeout. Вторая функция – stop() – уничтожает порождение потоков строкой clearTimeout(p1); и присваивает переменной, содержащей поток вычисления (p1) значение null (не существует).
Помимо внедрения метода window.clearTimeout, управление программой тоже было существенно доработано:
При нажатии на кнопку старт происходит проверка условием if существует ли поток вычислений в данный момент времени и если его нет, то запускает функцию start().
При нажатии на кнопку стоп проверяется отсутствие потока вычислений и если он существует, то вызывается функция stop().
Такая доработка функционала позволяет нам исключить появление нескольких одинаковых потоков вычислений в один момент времени.