Но появилась новая проблема. Иногда скрипт во время работы внезапно запрещает выделять действия. Т.е при клике на любое действие, оно просто не выделяется красным. Это второй баг, независимый от первого если что
удаление после использования в ресурсе в коде скрипта
-
@DrPrime said in удаление после использования в ресурсе в коде скрипта:
Из скрипта так сделать одной настройкой не получится, нужно делать свой обработчик, который будет синхронизировать файл с ресурсом
Не понимаю, как можно повесить свой обработчик на завершение потока, только костыль.
У меня задача именно по завершению потока удалять строку из ресурса вне зависимости от статуса завершения потока.
-
@DrPrime said in удаление после использования в ресурсе в коде скрипта:
Если поставить при создании успехи неудачи 1:1, то данные будут удаляться из ресурса,
Да, надо писать в начале каждого потока какие данные есть в ресурсе и писать их в файл ресурса свои кодом. То есть синхронизировать вручную.
Но эта идея мне жутко не нравится, так как потенциальный источник багов.
-
@UserTrue said in удаление после использования в ресурсе в коде скрипта:
@sergerdn а создать два ресурса с разными настройками не вариант? И установить условия видимости в зависимости от той настройки которая решает удалить или нет
Не вариант, потому что условие видимости только одно и оно уже занято. Я думал об этом.
-
Мне кажется, я туплю, если сделать ресурс с настройками удаления, но поставить success и fail большое число, то BAS не должен удалять, пока не достигнет этого огромного числа.
А если мне надо удалять, то я ставлю перед запуском скрипта настройки success и fail единичка, тогда BAS должен удалять.
Надо проверить.
-
@sergerdn если хочешь сделать что-то хорошо, сделай это...
Ресурсы - удобное средство, но больше маркетинговое, чтобы любой сантехник, скачавший BAS, мог обеспечить своему скрипту минимальную мультизадачность.
Давно от них отказался (кажется в 20-й версии, когда после очередного обновления, потоки стали периодически виснуть на ресурсе) в пользу глобальных переменных - моделируй, как хочешь и главное всё понятно, потому что всё своё родное.
имхо -
@Vituskosoy так глобальные вроде со списками не дружат - сто раз поднимался вопрос на форуме - как решаешь эту задачу ?
-
@Vituskosoy said in удаление после использования в ресурсе в коде скрипта:
@sergerdn если хочешь сделать что-то хорошо, сделай это...
Ресурсы - удобное средство, но больше маркетинговое, чтобы любой сантехник, скачавший BAS, мог обеспечить своему скрипту минимальную мультизадачность.
Давно от них отказался (кажется в 20-й версии, когда после очередного обновления, потоки стали периодически виснуть на ресурсе) в пользу глобальных переменных - моделируй, как хочешь и главное всё понятно, потому что всё своё родное.
имхоА можно по подробнее? Я не припомню проблему с зависанием потоков из за ресурсов
@Nicolas said in удаление после использования в ресурсе в коде скрипта:
@Vituskosoy так глобальные вроде со списками не дружат - сто раз поднимался вопрос на форуме - как решаешь эту задачу ?
Сохраняйте глобальную переменную в локальную, вносите изменения и сохраняйте локальную переменную обратно в глобальную.
-
@Nicolas said in удаление после использования в ресурсе в коде скрипта:
@Fox ну это такой себе костыль, помнится ты сам писал про это - что нет глобальных списков ... Объекты не считово ...
Да, писал 6 лет назад, причём в той же теме указал на это решение. Но даже если изменения внесут и позволят работать с глобальной переменной напрямую в действии, то под капотом действия всё равно будет перевод данных из глобальной переменной в локальную и обратно. Так что называть эту логику костылём "такое себе"
-
я тоже, что-то там придумывал на этот счет, но уже не помню нифига, копаться лень, но что-то там придумывал :) В целом если совсем не критичные данные можно, что-то придумать, а так база данных - И как говорил мистер Черт - ни каких проблем...
-
@sergerdn said in удаление после использования в ресурсе в коде скрипта:
В процессе создания ресурса можно указать "удалять после использования", а как изменить это в коде скрипта?
Задача - при определенных настройках при старте скрипта включать или выключать такое поведение.
Смотрю на API создания ресурса и не понимаю, где нужная мне настройка.
RCreate(resource_name, successes, fails, simultaneous, interval, greedy, dont_give_up)В настройках кубика создания ресурса тоже ничего нет.
Причем мне нужно, чтобы строки удалялись из файла сразу же, как поток закончит работу, а не после остановки скрипта.
Если очень нужно, вы можете создать полный аналог ресурсов через действия BAS. Перед началом работы читайте содержимое файла, создайте массив объектов с ключами "успешное использование", "ошибочное использование", "данные" и "время последнего использования". Получать данные из массива объектов можно фильтруя по дате использования, либо добавить отдельный от массива объектов ключ с индексом последних использованных данных.
Для корректной работы с файлом вам понадобится реализовать семафор, что бы в один момент времени с файлом работал только один поток.
Для реализации логики по завершению потока нужно будет поместить все действия в функцию, а её вызов добавить в игнорирование ошибок, после вызова по условию WAS_ERROR увеличивать значение ключа ошибочное использование или успешное.
Так вы сможете хоть на лету менять количество использований, синхронизировать данные с файлом когда вдумается, выводить статистику использований и всё что ещё будет угодно
-
Спасибо за подробную инструкцию, проблемы BAS в том, что я не могу написать тесты на свой код, и уже тем более никакого code coverage не будет.
Именно поэтому меня любые костыли в BAS смущают. В свое время я себя пересилил и написал реализацию именованных блокировок, но у меня выбора не было, они мне как воздух нужны и заменить нечем.
-
@sergerdn said in удаление после использования в ресурсе в коде скрипта:
Мне кажется, я туплю, если сделать ресурс с настройками удаления, но поставить success и fail большое число, то BAS не должен удалять, пока не достигнет этого огромного числа.
А если мне надо удалять, то я ставлю перед запуском скрипта настройки success и fail единичка, тогда BAS должен удалять.
Надо проверить.
Не сработало, BAS не синхронизирует в файл изменения в ресурсе, из файла читать читает, если подкинуть туда свежие строки, но не пишет туда.
То есть по умолчанию синхронизация работает в одну строну.

-
@UserTrue said in удаление после использования в ресурсе в коде скрипта:
@sergerdn RSync(Name)
Сработала в начале каждого потока довольно странная конструкция, спасибо, что подсказал. В который раз убеждаюсь - надо иногда отдыхать.
if ("ProxyFile" in _R && _R["ProxyFile"]) { _R["ProxyFile"].die() _R["ProxyFile"] = null } // особенно вот эта часть удивляет, подсмотрел ее в сгенеренном коде BAS. if (true) RSync("ProxyFile")

