Не работает sleep

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
Аватара пользователя
klejnov
Сообщения: 62
Зарегистрирован: Чт июн 28, 2018 4:31 am
Откуда: Бобруйск
Благодарил (а): 15 раз
Поблагодарили: 4 раза

Не работает sleep

Сообщение klejnov » Ср янв 29, 2020 11:08 pm

Добрый вечер, форумчане.

Не могу решить проблему:

сценарий:

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

say("Проверка 1", 2);
sleep(5);
say("Проверка 2", 2);
если запускать вручную, то между голосовыми сообщениями "Проверка 1" и "Проверка 2" пауза есть.

а если запускать голосом, через Алису, то сначала пауза 5 секунд, а потом сразу поочередно без паузы две фразы "Проверка 1" и "Проверка 2".

если сценарий сделать таким:

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

say("Проверка 1", 2);
sleep(5);
sleep(5);
say("Проверка 2", 2);
и снова запускать голосом, через Алису, то сначала пауза 10 секунд, а потом сразу поочередно без паузы две фразы "Проверка 1" и "Проверка 2".


Куда копать? как исправить? Спасибо.
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 898 раз

Re: Не работает sleep

Сообщение SmoKE_xDDD » Ср янв 29, 2020 11:58 pm

Не юзайте sleep, вы вешаете всю систему на 5 секунд.... Таймеры же есть...
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Не работает sleep

Сообщение xor » Чт янв 30, 2020 9:36 am

klejnov писал(а):Добрый вечер, форумчане.

Не могу решить проблему:

сценарий:

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

say("Проверка 1", 2);
sleep(5);
say("Проверка 2", 2);
если запускать вручную, то между голосовыми сообщениями "Проверка 1" и "Проверка 2" пауза есть.

а если запускать голосом, через Алису, то сначала пауза 5 секунд, а потом сразу поочередно без паузы две фразы "Проверка 1" и "Проверка 2".

если сценарий сделать таким:

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

say("Проверка 1", 2);
sleep(5);
sleep(5);
say("Проверка 2", 2);
и снова запускать голосом, через Алису, то сначала пауза 10 секунд, а потом сразу поочередно без паузы две фразы "Проверка 1" и "Проверка 2".


Куда копать? как исправить? Спасибо.
Да, со слипом - осторожнее. А вот ещё - вместо say попробуйте debmes ('проверка 1'); и тд. И проверьте в х рее. Должна быть пауза. А say может кэшироваться, через очередь сообщений передаваться и тд

Отправлено с моего Redmi 4X через Tapatalk

Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Не работает sleep

Сообщение Chainik » Чт янв 30, 2020 11:20 am

Sleep использовать "вредно". Как правильно сказали, это подвешивает систему. Попробуйте использовать, как уже предложили, таймеры:

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

say("Проверка 1", 2);
setTimeOut('zaderzhka_5_sec','say("Проверка 2", 2);',5);
За это сообщение автора Chainik поблагодарил:
klejnov (Чт янв 30, 2020 10:32 pm)
Рейтинг: 1.16%
Аватара пользователя
klejnov
Сообщения: 62
Зарегистрирован: Чт июн 28, 2018 4:31 am
Откуда: Бобруйск
Благодарил (а): 15 раз
Поблагодарили: 4 раза

Re: Не работает sleep

Сообщение klejnov » Чт янв 30, 2020 11:29 am

Chainik писал(а):
Чт янв 30, 2020 11:20 am
Sleep использовать "вредно". Как правильно сказали, это подвешивает систему. Попробуйте использовать, как уже предложили, таймеры:

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

say("Проверка 1", 2);
setTimeOut('zaderzhka_5_sec','say("Проверка 2", 2);',5);

А можно ли здесь:

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

setTimeOut('zaderzhka_5_sec','say("Проверка 2", 2);',5);
Вот эту часть:

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

say("Проверка 2", 2);
Вынести в отдельную функцию и в таймере прописать название функции? Т.к. в таймере может быть не одна строчка на выполнения, а несколько и тогда код будет сильно нагроможден.

Спасибо.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Не работает sleep

Сообщение Chainik » Чт янв 30, 2020 12:22 pm

klejnov писал(а):
Чт янв 30, 2020 11:29 am
Chainik писал(а):
Чт янв 30, 2020 11:20 am
Sleep использовать "вредно". Как правильно сказали, это подвешивает систему. Попробуйте использовать, как уже предложили, таймеры:

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

say("Проверка 1", 2);
setTimeOut('zaderzhka_5_sec','say("Проверка 2", 2);',5);

А можно ли здесь:

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

setTimeOut('zaderzhka_5_sec','say("Проверка 2", 2);',5);
Вот эту часть:

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

say("Проверка 2", 2);
Вынести в отдельную функцию и в таймере прописать название функции? Т.к. в таймере может быть не одна строчка на выполнения, а несколько и тогда код будет сильно нагроможден.

Спасибо.
Наверняка можно и в функцию (правда, сам не пробовал). Но самый простой вариант, записать все, что должно быть сделано, в скрипт (сценарий)

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

setTimeOut('zaderzhka_5_sec','runScript("Mnogo_vsyakikh_deistviii");',5);
или в метод

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

setTimeOut('zaderzhka_5_sec','callMethod("Имя_Объекта.Mnogo_vsyakikh_deistviii");',5);
Аватара пользователя
klejnov
Сообщения: 62
Зарегистрирован: Чт июн 28, 2018 4:31 am
Откуда: Бобруйск
Благодарил (а): 15 раз
Поблагодарили: 4 раза

Re: Не работает sleep

Сообщение klejnov » Чт янв 30, 2020 12:32 pm

Chainik писал(а):
Чт янв 30, 2020 12:22 pm
Наверняка можно и в функцию (правда, сам не пробовал). Но самый простой вариант, записать все, что должно быть сделано, в скрипт (сценарий)

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

setTimeOut('zaderzhka_5_sec','runScript("Mnogo_vsyakikh_deistviii");',5);
или в метод

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

setTimeOut('zaderzhka_5_sec','callMethod("Имя_Объекта.Mnogo_vsyakikh_deistviii");',5);
Как вариант. Спасибо.
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Не работает sleep

Сообщение xor » Чт янв 30, 2020 5:36 pm

klejnov писал(а):
Chainik писал(а):
Чт янв 30, 2020 12:22 pm
Наверняка можно и в функцию (правда, сам не пробовал). Но самый простой вариант, записать все, что должно быть сделано, в скрипт (сценарий)

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

setTimeOut('zaderzhka_5_sec','runScript("Mnogo_vsyakikh_deistviii");',5);
или в метод

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

setTimeOut('zaderzhka_5_sec','callMethod("Имя_Объекта.Mnogo_vsyakikh_deistviii");',5);
Как вариант. Спасибо.
Можно предварительно загнать код в текстовую переменную и в таймер её подставлять

Отправлено с моего Redmi 4X через Tapatalk

Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Не работает sleep

Сообщение xor » Чт янв 30, 2020 5:37 pm

Chainik писал(а):Sleep использовать "вредно". Как правильно сказали, это подвешивает систему. Попробуйте использовать, как уже предложили, таймеры:

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

say("Проверка 1", 2);
setTimeOut('zaderzhka_5_sec','say("Проверка 2", 2);',5);
Ну, если быть точным, не систему подвешивает, а тот поток, где слип выполняется

Отправлено с моего Redmi 4X через Tapatalk

За это сообщение автора xor поблагодарили (всего 2):
Chainik (Чт янв 30, 2020 6:31 pm) • klejnov (Чт янв 30, 2020 10:32 pm)
Рейтинг: 2.33%
Ответить