Здравствуйте! Не могли бы вы поведать мне о способах задержки программы? я знаю про setInterval и setTimeout, а есть ли еще какие-нибудь команды для задержек?
В JS задержек быть не должно. Может быть пауза между событиями, вот она и организуется через указанные инструкции. Программа на JS не должна останавливаться. Если Вы программируете МК на Си, привычная логика построения программы здесь не годится.
Не соглашусь. Это в браузерном JS есть серьезные ограничения по "простою" программы. В реализации Espuruino, которая во первых ориентирована на работу в embedded системах, где тайминги очень важны при работе с различного рода переферией, во вторых она ближе по своему смыслу к Node.js, а не к браузерным платформам, и здесь сам программист вполне может решить применить "задержки", если ему так удобнее/целеесобразнее и т.п. ниже фрагмент кода формирующий задержку (2 ms), который я применял при работе с знакогенерирующими дисплеями, т.к. код работал в инициализирующем блоке, т.е. выполнялся ровно один раз, и до выполнении этого инициализирующего кода основной код не работал, то мне было комфортней таким образом применить задержку: Код (Javascript): old_time = getTime(); for(var delta_time;;) { delta_time = getTime() - old_time; if (delta_time > 0.002) { break; } }
Почему ТС задает вопрос? Потому что на всем поле примеров, которые он видел, не был посажен овощ, по имени задержка. Знать его нужно в последнюю очередь, уж точно после таких вещей как замыкания и callback.
Вот что говорит автор Espruino на тему задержек: Ну и код задержки от него же : Код (C++): var t=getTime()+1000; while(getTime()<t);
Приведенная вами выкопировка мне знакома и по сути мною сказанного ничего не меняет. В статье создатель поясняет почему нет ф-и delay как таковой, и как в целом нужно поступать, в связи с тем, что подход в JS иной, НО, это в принципе никак не мешает применять задержки там где это нужно, т.к. в противном случае из за выполнения другого асинхронного кода у вас могут съехать тайминги там где как раз это важно, в силу того что движок JS по своей сути однопоточный (!). Если вы как программист планируете поведение программного кода, то вы в целом понимаете где можно применить задержку для формирования чего очень важно. В приведенном мной примере формируется 2-х ms задержка которую по меркам JS/Espruino вполне можно считать небольшой. С другой стороны если вам нужна 500 ms задержка (пример автора из документации: // some commands 1 delay(500); // some commands 2 ) то в этом случае нужно поступать по другому. PS: представленный мной код формирующий задержку по сути ничем не отличается от представленного вами из документации, с той лишь разницей что применены разные циклы. PPS: резюме - грамотно применять задержки под платформой Espuruino там где на небольшом отрезке времени нужно сформировать сложную циклограмму некоего протокола критичного с временным сдвигам вполне можно (как и налюбой мне известной embedded платформе) а вот системно применять задержки на значительные промежутки времени это уже непонимание работы механизма "движка" JS, о чем собственно автор и написал в документации.
Согласен Ваше резюме грааааздо круче чем приведенная мной ссылка на автора. Да и вообще - мощно! ... главное чтобы ТС понял, и так не делал.
Надеюсь, Вы знаете что говорите и уверены в своих силах. Велкам: http://forum.amperka.ru/threads/Плавное-управление-сетевым-освещением-pid-Вопрос-разработчикам.9765/ Поможете?
С удовольствием помог бы, если бы на текущий момент не напряженка со свободным временем. По диагонали пробежав ветку, не смог сходу понять какое отношение возникшие у вас проблемы относятся к теме применимости задержек в JS на embedded платформах ? Кстати как вы написали у вас возможно проблемы из за работы таймера, но о такого рода проблемах я собственно писал выше.
Там как раз и надо "грамотно применять задержки под платформой Espuruino там где на небольшом отрезке времени нужно сформировать сложную циклограмму некоего протокола критичного с временным сдвигам вполне". Суть состоит в том, что после получения 0 на одной ноге (вход) следует постоянно с требуемой задержкой (сидит в какой-нибудь переменной) от 0.2 до 4 мс выставлять другую ногу (выход) в 1. Мне это не удалось никаким способом. Тому, кто был в той теме тоже. Просто услышав про "грамотно применять задержки под платформой Espuruino" и "как и налюбой мне известной embedded платформе" подумал что Вам это на раз.
Ну так извините, я бы даже и не пытался под JS работать на долях миллисекунды. Речь о формировании задержки порядка 1...20 ms и ни как системный подход, а как (негарантированная) схема сохранения таймингов на данном отрезке времени. В какой то ветке я поднимал обсуждение - обработка в Espruino/JS нескольких сотен микросекунд ответ мне был таким- никак, вернее никак если только не делать это частью ядра Espruino (соответственно разрабатывать встроенный модуль на С/С++), но во первых это отдельная тема, а во вторых может сделать работу непредсказуемой "новоиспеченного" ядра. Человек конкретно спросил "Здравствуйте! Не могли бы вы поведать мне о способах задержки программы?" на это и был ответ, с кратким комментарием приминимости. PS: Espruino насколько я знаю внутренний цикл обработки составляет порядка нескольких ms
Неполная цитата. "а есть ли еще какие-нибудь команды для задержек?" Ответ: команд нет. Ни одной. Есть способы оттормозить программу, которые не приветствуются.
Мне тоже кажется, что применение реалтайм интерпретаторов для "тонкой" работы со временем не самая удачная мысль...
Нельзя не согласиться. Проверено на собственной шкурке. Только ясно это (для начинающего после Ардуино) становится ой как не сразу. И утверждения вида "грамотно применять задержки под платформой Espuruino там где на небольшом отрезке времени нужно сформировать сложную циклограмму некоего протокола критичного с временным сдвигам вполне можно (как и налюбой мне известной embedded платформе)" сильно отдалаяют такое понимание.
причем тут понимание идеологии espruino/js и вопрос который был задан: "Здравствуйте! Не могли бы вы поведать мне о способах задержки программы? я знаю про setInterval и setTimeout, а есть ли еще какие-нибудь команды для задержек?" Зачем коней с яблоками мешать ? Ну понятно бы было если вопрос звучал примерно "...а годиться ли эта платформа для работы периферией которая требует четкого соблюдения коротких (1...100 us) таймингов ?", но вопрос то звучал о другом PS: собственно на заре знакомства с Espruino/JS примерно такой вопрос я и задавал, на что и получил вполне конкретный ответ - нет. полагаю тема исчерпана