Разработка магазинов с гарантией попадания в ТОП поисковых систем

Узнать подробнее

Метод 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().

Такая доработка функционала позволяет нам исключить появление нескольких одинаковых потоков вычислений в один момент времени.