2013-04-12 2 views
2

Скажем, у меня есть бесконечный цикл javascript, который увеличивает число и отображает его на экране. У меня также есть кнопка на экране, которая приостанавливает таймер.Выполнение двух вещей сразу в Javascript

Если javascript проходит через этот бесконечный цикл, как я могу заставить кнопку паузы остановить цикл? Для этого нужны «потоки»? Я думал только о том, что тигр $('#pause').click() подключен к счетчику.

+0

Если у вас бесконечный цикл, вы повесите свой браузер. (рабочие потоки могут использоваться, однако, в браузерах, которые их поддерживают). Вопрос в том, почему ** у вас бесконечный цикл? –

+2

почему бы не использовать 'setInterval()' –

+0

Вы выполняете «цикл» через тайм-аут? Если да, попробуйте clearTimeout() (http://www.w3schools.com/jsref/met_win_cleartimeout.asp), в противном случае вам нужен условный комментарий ... но я не знаю вашего кода. Можете ли вы опубликовать его? – cereallarceny

ответ

4

Вы никогда не должны заходить в бесконечный цикл в клиентском JavaScript, период. Обычно отсчет до бесконечности выполняется с использованием setInterval или setTimeout, что позволяет использовать другой код, такой как обработчик кликов, между таймерами.

Это правда, что вы можете использовать web workers (т. Е. Многопоточный JavaScript), если клиентский браузер поддерживает их, но вам это не нужно просто для бесконечного счетчика.

+0

А вот 'setInterval' выглядит намного лучше. Существуют ли какие-либо условия гонки, связанные с этим? Что делать, если кнопка 'click' срабатывает одновременно с запуском другого интервала? – n0pe

+0

@MaxMackie: одно из двух событий будет запущено первым, и оно запустится до того, как начнется запуск другого. Условия гонки сортируются к тому моменту, когда ваш JS-код попадает на свет. – Jon

+0

Отлично, спасибо за разъяснения Джон. – n0pe