@GamiD said in Лайфхаки BAS:
Пауза в любой точки скрипта
Создаете ресурс с названием "Pause" тип "Из файла" выбираете пустой файл
В начало скрипта добавляете действие "Выполнить код" с содержимым
function wait(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
function _sa()
{
var pause = native("filesystem", "readfile", JSON.stringify({value: RInfo("Pause","Location"),base64:false,from:0,to:0}));
if(pause.length != 0){
for (var i = 0; i < 1e7; i++) {
var pause = native("filesystem", "readfile", JSON.stringify({value: RInfo("Pause","Location"),base64:false,from:0,to:0}));
if(pause.length == 0){break;}
wait(1000);
}
}
}
Если файл выбранный в ресурсе "Pause" содержит символы будет пауза
Чтобы продолжить работу скрипта нужно очистить файл
Тестовый скрипт
pause.xml
Идея хорошая, как оказалось ты её реализовал ещё до того, как я об этом написал :D
Но давай по порядку:
- Объявление локальной функции в функции main приведёт к ошибке при вызове этой локальной функции из другой функции BAS. Для наглядности - тестовый скрипт
- Переопределяя функцию
_sa() не нужно было удалять рабочий код самой функции
ScriptWorker.SetCurrentAction(id)
это может привезти к непредсказуемым багам и ошибкам
3. Переопределённая функция _sa() вернётся в исходное состояние после любого браузерного действия


Тестовый скрипт
функция wait это отдельный кошмар
- Для чего в ней цикл на 10 000 000 итераций? (да 1e7, это число 10 000 000) Ведь для использования этого кода, как функцию задержки цикл for не подходит, например если указать время wait(100000), то все итерации завершатся быстрее, чем пройдёт указанное время.
- Условие
new Date().getTime() - start) > milliseconds является дико ресурсоёмким, так как в секунду происходит очень много итераций и выполнения кода. Можно запросто забить процессор на 100% в 2-3 потока с таким ожиданием. Лучше использовать асинхронный код ожидания или метод sleep() в BAS, но функцию тогда нужно будет оформить для работы с асинхронными методами BAS.
- Для чего в функции
_sa() цикл с ожиданием? Эта функция будет вызываться перед каждым действием BAS и так как функция не асинхронная, итерпретатор будет ждать, пока цикл из 10 000 000 итераций с секундной задержкой закончится прежде чем выполнить каждое действие (на выполнение первого действия в скрипте уйдёт чуть больше 115 дней)
- Сама логика читать файл после каждого действия BAS тоже не очень хорошая идея. Каждый поток, после каждого действия в скрипте будет читать файл, винт вам не скажет спасибо. Лучше было ограничить чтение файла одним или несколькими потоками с записью данных в глобальную переменную.