Как изменить ресурс ?

Поддержка
  • Конечная задача такая: в "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/27

    P.S. просто запуск в несколько потоков мне не подходит по нескольким причинам.

    И по каким же? Берёте полностью все действия запихиваете в новую функцию, которую и запускаете через действие "Вызов функции в несколько потоков", а сам проект запускаете в 1 поток.

  • @Fox
    Основная проблема в том, что я с этим еще не разбирался. И не хочу на достаточно объемном, далеко не безупречном коде это начинать, потому что как с вызовом асинхронной функции где ошибки от нее в лог не идут, а я об этом не знал и потом искал способы это обойти, так и здесь подобные мелочи снова будут ставить меня в многодневный тупик, в попытках понять где проблема и еще куча времени на ее обход.
    А на счёт гладиолуса - я совсем не ждал от вас описания причин невозможности сделать чтото, а вот ссылки вроде той что подкинули вполне норм. (за что кстати спасибо).

  • This post is deleted!
  • @gurkin4 Вы пишете про переменные, а мне нужно именно ресурс (поскольку только ресурс можно ставить в количество потоков (через конструктор я туда и переменную запихиал, но БАС выдает ошибку при попытке запуска (в записи все прокатывает, скорее всего потому что поток по любому один)))
    Проблема в том, что динамически я могу создать и менять только ресурс типа "список строк".
    В последних экспериментах получилось засунуть в задание потока и строковый ресурс "+0", но скрипт повел себя не неожиданно. Вместо расчётного количества потоков было запущено количество потоков разрешённое в "количество повторов"->"Успешных выполнений".

  • @_User_ вы принципиально не хотите использовать "Вызов функции в несколько потоков" или асинхронные функции?
    только через них нормально можно сделать то что по идее наверно хотите.

  • This post is deleted!
  • @_User_ said in Как изменить ресурс ?:

    Конечная задача такая: в "OnApplicationStart" в зависимости от выбранных настроек определяется необходимое количество потоков, создаётся ресурс с таким значением и подставляется в количество потоков.

    Вы как то лесом пошли - Создаете ресурс - пользователь указывает сколько 3 а в потоках указываете этот ресурс.

    Screen Shot 2021-10-31 at 18.23.42.png

    Screen Shot 2021-10-31 at 18.26.17.png

  • @tet-vivi На данный момент я именно не хочу их использовать из-за небольшого практического опыта - постоянно всплывают ранее не известные нюансы, которые исправляю "на лету" (если получается) и все эти исправления в конечном итоге так "уродут" код, что начинают мешать друг другу и я сам в конце концов начинаю в нем путаться и отлаживать такую кашу (вылавливать ошибки и причины "неадекватного" поведения) - большой гемор.

  • @gurkin4 Да проект тут особо не важен. Я все описал в вопросе - в количество потоков можно подставить только числовой ресурс, а я могу В СКРИПТЕ МЕНЯТЬ (уже при запущенном скрипте) только текстовый. В результате програмно изменить количество потоков НЕ могу (если это вообще возможно)

  • @Bigma В вопросе я не уточнил важный момент: мне нужно не указывать конкретное количество потоков на старте (как предлагаете Вы), а проанализировать наличие разрешения на запуск (в настройках каждого крана есть флажок-разрешение на его запуск) и уже по их количеству (разрешений на запуск) задать число потоков.

  • Пока было использовано временное (а судя по отзывам возможно и единственное) решение.
    Запускать скрипт с максимальным (по числу кранов) числом потоков и в основной функции каждого из кранов делать проверку на разрешение его запуса. При отсутствии разрешения - завершить поток с запретом на перезапуск.

  • This post is deleted!
  • @gurkin4 да переменную я любую могу сделать и с ней что угодно сделать, а вот когда переменную в ресурс передаю (чтобы поставить в количество потоков) её зачение становится текстом (было число 3, стала строка 3).

  • @_User_ Да передать число есть варианты, но проблема как уже и сказал Фокс в том, что читается один раз до всех функций, и дальше любые изменения не подхватывает. Я проверил.

  • @Bigma я тут находил вариант как сделать число потоков по количеству ресураса (получается БАС может взять значение которое может вычислить до запуска любой функции ( в т.ч. OnApplicationStart)) и по аналогии возникла мысль создать в конструкторе запись для числа потоков в которой просто будут просуммированы состояния разрешений для каждого крана (статусы флажков в виде сумм 1-запуск, 0-нет).
    Но чето сильно меня уже этот бот достал и сегодня возиться с ним не хочу.

  • @_User_ said in Как изменить ресурс ?:

    @tet-vivi На данный момент я именно не хочу их использовать из-за небольшого практического опыта - постоянно всплывают ранее не известные нюансы, которые исправляю "на лету" (если получается) и все эти исправления в конечном итоге так "уродут" код, что начинают мешать друг другу и я сам в конце концов начинаю в нем путаться и отлаживать такую кашу (вылавливать ошибки и причины "неадекватного" поведения) - большой гемор.

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

  • @_User_ Вам уже несколько раз сказали, работайте с вызовом функции в несколько потоков. Там Вы можете задать количество потоков от выбранных условий. Я хз в чем проблема.

    А то, что Вы боитесь, что будут отваливаться какие-то моменты, ведите правильный лог, чтобы ловить все ошибки.

  • 0 Votes
    6 Posts
    803 Views
  • 0 Votes
    7 Posts
    785 Views
  • 0 Votes
    32 Posts
    3350 Views
  • 0 Votes
    2 Posts
    1036 Views
  • 0 Votes
    9 Posts
    1823 Views