Страница 1 из 2

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

Добавлено: Вт мар 13, 2018 4:47 pm
diver
Всем привет!
Не понимаю в чем проблема, подскажите, пллиз.

Есть объект с двумя свойствами: 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

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

Добавлено: Вт мар 13, 2018 5:04 pm
olehs
AAA и BBB должны быть в ковычках.
И еще не используйте sleep с большими интервалами, т.к. это повешает всю систему.
используйте setTimeout

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

Добавлено: Вт мар 13, 2018 5:09 pm
diver
olehs писал(а):AAA и BBB должны быть в ковычках.
И еще не используйте sleep с большими интервалами, т.к. это повешает всю систему.
используйте setTimeout
И AAA и sleep, тут для примера и упрощения. Изначально это было 0/1 и вообще цикл.
Смысл в том, что не мониторится изменение свойства, в процессе выполнения метода.

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

Добавлено: Вт мар 13, 2018 5:15 pm
olehs
Нужно видеть полностью код и настройки без упрощений, т.к. проблема в них (проблема в алгоритме: что, где и за чем происходит)

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

Добавлено: Ср мар 14, 2018 9:02 am
diver
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 секундного слипа.

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

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

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

$SD='ААА';
sg("TestDimmer.StopDimmer",$SD);
say("StopDimmer = $SD",2);

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

Добавлено: Ср мар 14, 2018 9:36 am
diver
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 и пр. Поэтому привел очень простой пример, который всё равно повторяет изначальную проблему.

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

Добавлено: Ср мар 14, 2018 9:47 am
nick7zmail
Ну я в суть не залазил, просто высказал своё мнение, как сделать правильно и без последствий. Не зная изначальную задачу - трудно что-то правильное предложить...я попробовал.

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

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

Отправлено с моего Xperia XZ1 Compact через Tapatalk

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

Добавлено: Ср мар 14, 2018 10:45 am
diver
nick7zmail писал(а): Сперва происходит обращение к базе, вытаскивается всё, что может вытащиться по телу всего скрипта, и далее уже проверка условий и выполнение...повторных обращений к базе, скорее всего, уже нет
Вот! Собственно я и пытался узнать, может есть какие-то известные ограничения... Проблема явно в том, что изменения свойств, если они происходят во время выполнения кода - не учитываются. Может быть тогда надо не gg() делать, а как-то по другому..

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

Добавлено: Ср мар 14, 2018 12:22 pm
Chainik
Я без особой необходимости стараюсь не использовать в коде "sleep", т.к. при этом приостанавливается выполнение кода. Чтобы выполнение не приостанавливалось, надо использовать "SetTimeOut".