Изменение свойства, во время исполнения метода

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модераторы: Bagir, Ivan, Vit, immortal, PAV

diver
Сообщения: 45
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Изменение свойства, во время исполнения метода

Сообщение diver » Вт мар 13, 2018 4:47 pm

Всем привет!
Не понимаю в чем проблема, подскажите, пллиз.

Есть объект с двумя свойствами: TestDimmer.BrightUp и TestDimmer.StopDimmer
Необходимо при изменении свойства BrightUp запустить метод, который в том числе проверяется свойство StopDimmer, которое меняется во время работы этого метода. По X-Ray вижу, что свойство StopDimmer меняется. Только вот метод этого не понимает.
В итоге тестирую на таком методе:

Код: Выделить всё

sg("TestDimmer.StopDimmer",ААА);
$SD = gg("TestDimmer.StopDimmer");
say("StopDimmer = $SD",2);
sleep(15);
$SD = gg("TestDimmer.StopDimmer");
say("StopDimmer = $SD",2);
 
Первый say говорит AAA. Лезу в консоль и выполняю sg("TestDimmer.StopDimmer",BBB);
Второй say тоже говорит AAA... По X-Ray TestDimmer.StopDimmer давно уже равен BBB
olehs
Сообщения: 1045
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 76 раз
Поблагодарили: 296 раз

Re: Изменение свойства, во время исполнения метода

Сообщение olehs » Вт мар 13, 2018 5:04 pm

AAA и BBB должны быть в ковычках.
И еще не используйте sleep с большими интервалами, т.к. это повешает всю систему.
используйте setTimeout
diver
Сообщения: 45
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Изменение свойства, во время исполнения метода

Сообщение diver » Вт мар 13, 2018 5:09 pm

olehs писал(а):AAA и BBB должны быть в ковычках.
И еще не используйте sleep с большими интервалами, т.к. это повешает всю систему.
используйте setTimeout
И AAA и sleep, тут для примера и упрощения. Изначально это было 0/1 и вообще цикл.
Смысл в том, что не мониторится изменение свойства, в процессе выполнения метода.
olehs
Сообщения: 1045
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 76 раз
Поблагодарили: 296 раз

Re: Изменение свойства, во время исполнения метода

Сообщение olehs » Вт мар 13, 2018 5:15 pm

Нужно видеть полностью код и настройки без упрощений, т.к. проблема в них (проблема в алгоритме: что, где и за чем происходит)
diver
Сообщения: 45
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Изменение свойства, во время исполнения метода

Сообщение diver » Ср мар 14, 2018 9:02 am

olehs писал(а):Нужно видеть полностью код и настройки без упрощений, т.к. проблема в них (проблема в алгоритме: что, где и за чем происходит)
ОК. Вот давайте возьмем такой код. Про sleep я понял, но пока без него не получается - с таймерами не разобрался, постоянно ошибки в логах.
Пусть sleep и тормозит систему, но работать он в любом случае должен..

Код: Выделить всё

sg("TestDimmer.StopDimmer",100);
$var1 = gg("TestDimmer.StopDimmer");
say("$var1",2);
sleep(10);
$var2 = gg("TestDimmer.StopDimmer");
say("$var2",2);
 
После первого say я лезу в консоль и запускаю руками sg("TestDimmer.StopDimmer",200); Но в выводе все равно два раза 100. По x-ray изменение на 200 происходит, и происходит ДО истечения 10 секундного слипа.
Аватара пользователя
nick7zmail
Сообщения: 5733
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 111 раз
Поблагодарили: 1404 раза

Re: Изменение свойства, во время исполнения метода

Сообщение nick7zmail » Ср мар 14, 2018 9:14 am

Блин...а че вам вот так то не делается?? Зачем лишнее обращение к базе? Она и так у нас "узкое место" в производительности системы))

Код: Выделить всё

$SD='ААА';
sg("TestDimmer.StopDimmer",$SD);
say("StopDimmer = $SD",2);
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
diver
Сообщения: 45
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Изменение свойства, во время исполнения метода

Сообщение diver » Ср мар 14, 2018 9:36 am

nick7zmail писал(а):Блин...а че вам вот так то не делается?? Зачем лишнее обращение к базе? Она и так у нас "узкое место" в производительности системы))

Код: Выделить всё

$SD='ААА';
sg("TestDimmer.StopDimmer",$SD);
say("StopDimmer = $SD",2);
Убейте меня, пожалуйста...
Еще раз. Значение свойства TestDimmer.StopDimmer меняется в процессе выполнения метода.
Давайте я тогда подробно опишу изначальный смысл задачи..
Есть NooLite диммер, который работает следующим образом:
При нажатии на кнопку изменения яркости - происходит изменение свойство TestDimmer.Type3BrightUp , хотя значение свойство не меняется.
Когда кнопка отпускается - происходит изменение свойства TestDimmer.Type10StopReg, хотя само значение не меняется.
Метод для свойства TestDimmer.Type3BrightUp начинает срабатывать при рефреше свойства. И данный метод должен прекратить работать при рефреше свойства TestDimmer.Type10StopReg. Проблема в том, что метод для TestDimmer.Type3BrightUp срабатывает без проблем. Метод для TestDimmer.Type10StopReg срабатывает без проблем. НО метод TestDimmer.Type3BrightUp не может в процессе работы получить изменения свойства для TestDimmer.Type10StopReg.
PS
Честно, не хотел все это писать, что бы не запутать никого и не вызывать вопросов, что и как в одном методе, что в другом, как отрабатывает модуль для noolite и пр. Поэтому привел очень простой пример, который всё равно повторяет изначальную проблему.
Аватара пользователя
nick7zmail
Сообщения: 5733
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 111 раз
Поблагодарили: 1404 раза

Re: Изменение свойства, во время исполнения метода

Сообщение nick7zmail » Ср мар 14, 2018 9:47 am

Ну я в суть не залазил, просто высказал своё мнение, как сделать правильно и без последствий. Не зная изначальную задачу - трудно что-то правильное предложить...я попробовал.

Проблема, скорее всего (точно не уверен, просто пытаюсь на верный путь натолкнуть) в том, что команды метода вызываются асинхронно...т.е. Сперва происходит обращение к базе, вытаскивается всё, что может вытащиться по телу всего скрипта, и далее уже проверка условий и выполнение...повторных обращений к базе, скорее всего, уже нет. Отсюда и вытекает всё что вы описали...

Возможно надо как-то поменять алгоритм работы методов...или поменять код кнопки, добавив Ajax запросы текущего значения свойства....подумаю на досуге.

Отправлено с моего Xperia XZ1 Compact через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
diver
Сообщения: 45
Зарегистрирован: Пн мар 27, 2017 8:01 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Изменение свойства, во время исполнения метода

Сообщение diver » Ср мар 14, 2018 10:45 am

nick7zmail писал(а): Сперва происходит обращение к базе, вытаскивается всё, что может вытащиться по телу всего скрипта, и далее уже проверка условий и выполнение...повторных обращений к базе, скорее всего, уже нет
Вот! Собственно я и пытался узнать, может есть какие-то известные ограничения... Проблема явно в том, что изменения свойств, если они происходят во время выполнения кода - не учитываются. Может быть тогда надо не gg() делать, а как-то по другому..
Chainik
Сообщения: 605
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 70 раз
Поблагодарили: 169 раз

Re: Изменение свойства, во время исполнения метода

Сообщение Chainik » Ср мар 14, 2018 12:22 pm

Я без особой необходимости стараюсь не использовать в коде "sleep", т.к. при этом приостанавливается выполнение кода. Чтобы выполнение не приостанавливалось, надо использовать "SetTimeOut".
Ответить