npm error Node.js v22.14.0 npm verbose cwd C:\Users\Administrator\AppData\Roaming\BrowserAutomationStudio\apps\28.5.0\e\cache.ykKp\distr\app npm verbose os Windows_NT 10.0.17763 npm verbose node v22.11.0 npm verbose npm v10.9.0 npm verbose exit 1 npm verbose code 1 npm error A complete log of this run can be found in: C:\Users\Administrator\AppData\Local\npm-cache_logs\2025-03-18T19_14_32_997Z-debug-0.log [20:14:42.514] Failed to install npm modules [20:14:42.514] Autoclean current folder becuase of error C:/Users/Administrator/AppData/Roaming/BrowserAutomationStudio/apps/28.5.0/e/7832.ykKp [20:14:42.514] Autoclean current cache C:/Users/Administrator/AppData/Roaming/BrowserAutomationStudio/apps/28.5.0/e/cache.ykKp
Идеальная синхронизация - как?
-
Встала задача: 10 потоков. Каждый поток на определенном этапе запрашивает ручной ввод. Необходимо, чтобы скрипт автоматически проверял ввод данных в каждом из 10 потоков и после ввода в 10-м по счету потоке синхронно жал кнопку во всех 10 потоках.
Пробовал через глобальную переменную с её увеличением после ввода текста в каждом потоке и когда она становилась равна 10, переходить к нажатию кнопок, но почему-то в некоторых потоках возникает задержка в 1-2 секунды, либо же все действия продолжают выполняться только в одном потоке, игнорируя оставшиеся 9. Пробовал метки и переходы по ним. Пробовал вызов функции в несколько потоков, но также если делать через IF, то либо получается ошибка когда условие равенства глобальной переменной не выполняется, либо если использовать метки, то данный поток имеет задержку перед другими..
В общем, прошу помочь с указанием алгоритма, на котором можно реализовать такую синхронизацию. -
@Mentall said in Идеальная синхронизация - как?:
Встала задача: 10 потоков. Каждый поток на определенном этапе запрашивает ручной ввод. Необходимо, чтобы скрипт автоматически проверял ввод данных в каждом из 10 потоков и после ввода в 10-м по счету потоке синхронно жал кнопку во всех 10 потоках.
Пробовал через глобальную переменную с её увеличением после ввода текста в каждом потоке и когда она становилась равна 10, переходить к нажатию кнопок, но почему-то в некоторых потоках возникает задержка в 1-2 секунды, либо же все действия продолжают выполняться только в одном потоке, игнорируя оставшиеся 9. Пробовал метки и переходы по ним. Пробовал вызов функции в несколько потоков, но также если делать через IF, то либо получается ошибка когда условие равенства глобальной переменной не выполняется, либо если использовать метки, то данный поток имеет задержку перед другими..
В общем, прошу помочь с указанием алгоритма, на котором можно реализовать такую синхронизацию.Через глобальную переменную самый просто и наглядный вариант. Если скрипт работает не так, как вы ожидаете, смотрите условия работы с глобальной переменной, там ошибиться особо негде.
Я бы вообще установил отдельный поток для изменения глобальной переменной, а остальные потоки в цикле бы ожидали это изменение.
Да, минимальный сон в BAS составляет 1 секунду, то есть потоки начнут выполнять задачу от 0 до 1 секунды после изменения глобальной переменной. Если нужна задержка меньше, можете использовать node js или, например, действие "читать файл".
-
@DoctorKrolic said in Идеальная синхронизация - как?:
@Fox Извините за нескромность, но почему вы как админ не подписаны?
Потому что я не админ
:D. Да и бейджики пропали после обновления форума -
@Fox да, про возможность использования действий типа "читать файл" я не подумал. Спасибо! Покопаю в эту сторону. Со сном просто есть такая беда, что из-за сетевых задержек начало сна в потоках будет не одновременное, соответственно, на какие-то доли секунды будет отличаться и его окончание и срабатывание последующего действия.Вот если бы реализовать сон не по таймеру, а в зависимости от какого-то триггера, частоту запроса которого можно было бы настроить, было бы здорово.
-
@Mentall said in Идеальная синхронизация - как?:
@Fox да, про возможность использования действий типа "читать файл" я не подумал. Спасибо! Покопаю в эту сторону. Со сном просто есть такая беда, что из-за сетевых задержек начало сна в потоках будет не одновременное, соответственно, на какие-то доли секунды будет отличаться и его окончание и срабатывание последующего действия.Вот если бы реализовать сон не по таймеру, а в зависимости от какого-то триггера, частоту запроса которого можно было бы настроить, было бы здорово.
Если позволяет задача - используйте время. То есть если можно заранее, секунд за 5 знать, что нужно будет запустить выполнение задачи одновременно всем потокам, то можно просто каждому потоку вычесть текущее время из времени указанного в глобальной переменной и использовать результат в действии "сон"
Про сон меньше секунды для цикла, можете прочитать тут
https://community.bablosoft.com/topic/5643/как-спать-меньше-секунды