Ну ещё в навигаторе, я просто эти понятия обединяю под понятие установленного языка.
Как изменить ресурс ?
-
Конечная задача такая: в "OnApplicationStart" в зависимости от выбранных настроек определяется необходимое количество потоков, создаётся ресурс с таким значением и подставляется в количество потоков.
Но возникли проблемы.
Вариант 1. При создании ресурса через кубик, создается СТРОКОВЫЙ ресурс и число добавляется туда только как строка (даже при преобразовании переменной в список, а потом кубиком список -> ресурс).
Вариант 2. Создаю ЧИСЛОВОЙ ресурс через вкладку ресурсы (делаю невидимым чтобы не мешался) и пытаюсь менять его значение через "set(index, value)", но ресурс НЕ меняется и ошибок в логе нет.
Пробовал так:
var TEMP = RMap("THREAD_COUNT_RUN") (со скобками {{ }} и без)
TEMP.set(0, THREAD_NEED)
Так:
RMap("THREAD_COUNT_RUN").set(0, THREAD_NEED)
И всяки разны комбинации, что придумал и нарыл через поиск, но ресурс так и остался при своем значении.Как можно решить этот вопрос ?
-
@_User_ said in Как изменить ресурс ?:
Конечная задача такая: в "OnApplicationStart" в зависимости от выбранных настроек определяется необходимое количество потоков, создаётся ресурс с таким значением и подставляется в количество потоков.
Но возникли проблемы.
Вариант 1. При создании ресурса через кубик, создается СТРОКОВЫЙ ресурс и число добавляется туда только как строка (даже при преобразовании переменной в список, а потом кубиком список -> ресурс).
Вариант 2. Создаю ЧИСЛОВОЙ ресурс через вкладку ресурсы (делаю невидимым чтобы не мешался) и пытаюсь менять его значение через "set(index, value)", но ресурс НЕ меняется и ошибок в логе нет.
Пробовал так:
var TEMP = RMap("THREAD_COUNT_RUN") (со скобками {{ }} и без)
TEMP.set(0, THREAD_NEED)
Так:
RMap("THREAD_COUNT_RUN").set(0, THREAD_NEED)
И всяки разны комбинации, что придумал и нарыл через поиск, но ресурс так и остался при своем значении.Как можно решить этот вопрос ?
Первое: Создать ресурс можно только строковый.
Второе: Количество потоков в проекте нужно указывать до старта работы функций. То есть нельзя указать количество потоков в функции "OnApplicationStart". Для этого используйте действие "Вызов функции в несколько потоков"
Третье: Гораздо проще преобразовать строку в число, чем ковырять внутренние апи BAS, что бы записать в ресурс не строку -
@Fox
Так в том и проблема, что я не могу записать в ресур не строку. Динамически создается только строковый ресурс, а в статическом ресурсе не могу изменить значение (нашел только вариант с АПИ).
А почему ограничение на период определения с количеством потоков ? почему нельзя в OnApplicationStart ? если в количестве потоков можно использовать ресур а не только цифру.P.S. просто запуск в несколько потоков мне не подходит по нескольким причинам.
-
@_User_ said in Как изменить ресурс ?:
@Fox
Так в том и проблема, что я не могу записать в ресур не строку. Динамически создается только строковый ресурс, а в статическом ресурсе не могу изменить значение (нашел только вариант с АПИ).
А почему ограничение на период определения с количеством потоков ? почему нельзя в OnApplicationStart ? если в количестве потоков можно использовать ресур а не только цифру.Потому что гладиолус! Ну реально, на какой ответ вы рассчитываете? Я не автор BAS.
Кстати в поле "количество потоков" можно указать любое выражение, а не только число или ресурс. Можете проверить сами указав2+2
https://community.bablosoft.com/topic/3521/лайфхаки-bas/27P.S. просто запуск в несколько потоков мне не подходит по нескольким причинам.
И по каким же? Берёте полностью все действия запихиваете в новую функцию, которую и запускаете через действие "Вызов функции в несколько потоков", а сам проект запускаете в 1 поток.
-
@Fox
Основная проблема в том, что я с этим еще не разбирался. И не хочу на достаточно объемном, далеко не безупречном коде это начинать, потому что как с вызовом асинхронной функции где ошибки от нее в лог не идут, а я об этом не знал и потом искал способы это обойти, так и здесь подобные мелочи снова будут ставить меня в многодневный тупик, в попытках понять где проблема и еще куча времени на ее обход.
А на счёт гладиолуса - я совсем не ждал от вас описания причин невозможности сделать чтото, а вот ссылки вроде той что подкинули вполне норм. (за что кстати спасибо). -
@gurkin4 Вы пишете про переменные, а мне нужно именно ресурс (поскольку только ресурс можно ставить в количество потоков (через конструктор я туда и переменную запихиал, но БАС выдает ошибку при попытке запуска (в записи все прокатывает, скорее всего потому что поток по любому один)))
Проблема в том, что динамически я могу создать и менять только ресурс типа "список строк".
В последних экспериментах получилось засунуть в задание потока и строковый ресурс "+0", но скрипт повел себя не неожиданно. Вместо расчётного количества потоков было запущено количество потоков разрешённое в "количество повторов"->"Успешных выполнений". -
@_User_ said in Как изменить ресурс ?:
Конечная задача такая: в "OnApplicationStart" в зависимости от выбранных настроек определяется необходимое количество потоков, создаётся ресурс с таким значением и подставляется в количество потоков.
Вы как то лесом пошли - Создаете ресурс - пользователь указывает сколько 3 а в потоках указываете этот ресурс.


-
@tet-vivi На данный момент я именно не хочу их использовать из-за небольшого практического опыта - постоянно всплывают ранее не известные нюансы, которые исправляю "на лету" (если получается) и все эти исправления в конечном итоге так "уродут" код, что начинают мешать друг другу и я сам в конце концов начинаю в нем путаться и отлаживать такую кашу (вылавливать ошибки и причины "неадекватного" поведения) - большой гемор.
-
@gurkin4 Да проект тут особо не важен. Я все описал в вопросе - в количество потоков можно подставить только числовой ресурс, а я могу В СКРИПТЕ МЕНЯТЬ (уже при запущенном скрипте) только текстовый. В результате програмно изменить количество потоков НЕ могу (если это вообще возможно)
-
@Bigma В вопросе я не уточнил важный момент: мне нужно не указывать конкретное количество потоков на старте (как предлагаете Вы), а проанализировать наличие разрешения на запуск (в настройках каждого крана есть флажок-разрешение на его запуск) и уже по их количеству (разрешений на запуск) задать число потоков.
-
Пока было использовано временное (а судя по отзывам возможно и единственное) решение.
Запускать скрипт с максимальным (по числу кранов) числом потоков и в основной функции каждого из кранов делать проверку на разрешение его запуса. При отсутствии разрешения - завершить поток с запретом на перезапуск. -
@Bigma я тут находил вариант как сделать число потоков по количеству ресураса (получается БАС может взять значение которое может вычислить до запуска любой функции ( в т.ч. OnApplicationStart)) и по аналогии возникла мысль создать в конструкторе запись для числа потоков в которой просто будут просуммированы состояния разрешений для каждого крана (статусы флажков в виде сумм 1-запуск, 0-нет).
Но чето сильно меня уже этот бот достал и сегодня возиться с ним не хочу. -
@_User_ said in Как изменить ресурс ?:
@tet-vivi На данный момент я именно не хочу их использовать из-за небольшого практического опыта - постоянно всплывают ранее не известные нюансы, которые исправляю "на лету" (если получается) и все эти исправления в конечном итоге так "уродут" код, что начинают мешать друг другу и я сам в конце концов начинаю в нем путаться и отлаживать такую кашу (вылавливать ошибки и причины "неадекватного" поведения) - большой гемор.
для организации кода можно использовать функции.
с помощью них можно разбить код на кусочки которые выполняют только определенные задачи.
я когда правлю код функции у себя почти не задумываюсь об коде остальных функций(или вообще не задумываюсь).
после из таких кубиков/функций можно собирать.. -
@_User_ Вам уже несколько раз сказали, работайте с вызовом функции в несколько потоков. Там Вы можете задать количество потоков от выбранных условий. Я хз в чем проблема.
А то, что Вы боитесь, что будут отваливаться какие-то моменты, ведите правильный лог, чтобы ловить все ошибки.