Сообщение создано: 20. 08. 2013 [07:01]
|
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
|
Например, нажимаем кнопку, пошел отсчет времени, по прошествии 5 минут происходит событие (загорается лампочка на виджете). Каким образом это можно сделать в обработке виджета, если там мы сами задаем время вычисления процедуры? Присвоив значение переменной один раз, оно также будет присваиваться при каждом вычислении процедуры. Подскажите, где что можно почитать.
|
Сообщение создано: 20. 08. 2013 [12:09]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"dell" wrote:
Подскажите, где что можно почитать.
В главном руководстве начинающего, в Быстром Старте. :)
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 21. 08. 2013 [07:30]
|
dell
Путин Краб
Создатель темы
Зарегистрирован(а) с: 09.04.2013
Сообщения: 28
|
Спасибо.
Вот беру второй пример и пробую:
var tm_to;
if (SYS.time() > tm_to) {
tm_to = SYS.time()+10;
Text1_color = "red";
Text1_text = tm_to;
} else {
Text1_color = "green";
}
Получается, что каждые 10 секунд цвет текста меняется на красный, в остальное время он зеленый. Однако при запуске и работе, он всё время красный, почему? Если проблема в переопределении переменной tm_to, то убирая его получаем ошибку, что переменная не определена, но используется. Как тут быть.
И еще вопрос, заодно )). Как ведет себя система, если время выполнения процедуры оказывается больше выполнения времени такта? Замедляется работа всей системы,на время вычисления или прекращается обработка процедуры?
|
Сообщение создано: 21. 08. 2013 [10:28]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"dell" wrote:
Получается, что каждые 10 секунд цвет текста меняется на красный, в остальное время он зеленый. Однако при запуске и работе, он всё время красный, почему?
Так получается или не получается?
"dell" wrote:
Если проблема в переопределении переменной tm_to, то убирая его получаем ошибку, что переменная не определена, но используется. Как тут быть.
Проблема в том, что эта переменная при старте ничем не инициализирована и вообще там не число.
Инициируйте её, кроме того она должна быть глобальной, а не автоматической, хотя в рабочей версии можно и автоматической поскольку она при следующем вызове сохраняется.
if(f_start) tm_to = SYS.time()+10;
В любом случае ставьте печать сообщений и изучайте.
"dell" wrote:
И еще вопрос, заодно )). Как ведет себя система, если время выполнения процедуры оказывается больше выполнения времени такта? Замедляется работа всей системы,на время вычисления или прекращается обработка процедуры?
Не всей поскольку потоков там много: http://wiki.oscada.org/Doc/OpisanieProgrammy/part4/files?get=sys_tasks.png
А фактический цикл просто растягивается и растёт счётчик пропусков в запланированном цикле.
Learn, learn and learn better than work, work and work.
|