Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.09.2012, 15:40
Shm Shm вне форума
Новичок на форуме
Отправить личное сообщение для Shm Посмотреть профиль Найти все сообщения от Shm
 
Регистрация: 27.07.2012
Сообщений: 6

Барьерная синхронизация для ассинхронных процессов JS
Красиво называется да? Вот не могу разобраться.
Простейший вид через переменную в общей памяти .
Поробывал вот так например :
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="text/javascript">
   var TimeOut = 3;
 function testTimeout()
 {
	  
    setInterval(function () {
        TimeOut--;
        alert('1 секундa' + TimeOut);

    }, 1000);
    while (TimeOut > 0) {
         }
 }
 </script>
 
 </head>
 <body>
  <p style="text-align: center" onclick='testTimeout()'><button>SetInterval falls into enless loop</button> </p>
 </body>
  
</html>

Но не получается цикл
while (TimeOut > 0) { }
почему-то бесконечный, хотя по моей логике , раз в секунду TimeOut должен уменьшаться на единицу непонимаю как работает этот планировщик отложенных вызовов, почему код уменьшающий TimeOut не выполняется. Может надо как-то протолкнуть эту очередь отложенных вызовов , может она передает управление другой процедуре когда есть свободное время . Типа Application->ProcessMessages/ Нашёл какойто метод document.dispatchEvent() может это оно

Последний раз редактировалось Shm, 12.09.2012 в 17:07.
Ответить с цитированием
  #2 (permalink)  
Старый 12.09.2012, 16:04
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

В js асинхронность виртуальная. Все события возникающие по таймеру или в ответ на действия пользователя ставятся в очередь после завершения текущего непрерываемого блока кода. Циклы в js относится к таким непрерываемым блокам, пока цикл не закончится ни одно событие или таймер не сработает.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 12.09.2012, 16:29
Shm Shm вне форума
Новичок на форуме
Отправить личное сообщение для Shm Посмотреть профиль Найти все сообщения от Shm
 
Регистрация: 27.07.2012
Сообщений: 6

Понятно .
А где про это можно почитать если не трудно наведите пожалуйста.
А то иногда хочется ассинхронные функции превратить в синхронные.
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2012, 00:23
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Этим способом лучше не пользоваться, ибо цикл вешает браузер на время выполнения.
Но если всё-таки и прибегают к такому способу, то просто проверяют время внутри цикла.
<script type="text/javascript">
document.write(new Date());
for(var end = 1000 + +new Date(); new Date()<end;){}
document.write(new Date());
</script>
__________________
29375, 35

Последний раз редактировалось Aetae, 13.09.2012 в 00:26.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2012, 10:38
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Сообщение от Maxmaxmахimus Посмотреть сообщение
гугли web workers
И чем это воркеры помогут?
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЧаВО - часто задаваемые вопросы (faq) Gozar Общие вопросы Javascript 212 21.09.2022 04:27
максимальная длина переменной для js функции progger Общие вопросы Javascript 5 06.09.2010 15:14
Дописать JS и PHP валидатор для телефона 3-3-4 conductor3 Работа 1 11.05.2010 00:01
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36
Js для переключения картинок Konstantin2009 Ваши сайты и скрипты 1 10.02.2009 00:41