Try using "Template" action and construct your text with hyerlinks than paste it to page.
Other option is to create simple LOCAL html page somewhere on your hard disk with
desired text and links, than open that local html page in another tab in BAS and than copy
from that tab to the tab where you are working.
Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке
-
горе от ума
-
Большое спасибо за то, что поделились своими рекомендациями и опытом. Итак, я думаю, что в моей ситуации лучше всего использовать простой мьютекс. К счастью, "критический" участок скрипта, который должен быть взаимно исключен, на самом деле не является критическим (скорее для экономии ресурсов).
-
@morpheus93, простой пример: mutex.xml
-
@sergerdn, если между получением и присвоением глобальной переменной нет асинхронного кода, то это будет работать как нужно, первый поток получивший значение присвоит переменной своё значение, а остальные потоки получат значение установленное первым потоком, потому что работа с глобальными переменными синхронизирована между потоками
-
@GhostZ said in Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке:
@sergerdn, если между получением и присвоением глобальной переменной нет асинхронного кода, то это будет работать как нужно, первый поток получивший значение присвоит переменной своё значение, а остальные потоки получат значение установленное первым потоком, потому что работа с глобальными переменными синхронизирована между потоками
Нельзя в одну атомарную команду поместить и проверку значения глобальной переменной и запись в нее.
- поток_1 проверил условие, должен перейти к присвоению значения глобальной переменной, в это время передалось управление поток_2
- поток_2 проверил значение глобальной переменной и тоже переходит к присвоению ей значения
- тут неважен порядок дальнейшего выполнений кода. А важно, что оба потока последовательно присваивают значение переменной и код в каждом потока считает, что захватил монопольное управление логикой и продолжает дальше работать. А должен работать только один поток.
В случае, если глобальные переменные синхронизированы между потоками, то не будет race condition. В чем я и не сомневался, а говорил о другом.
-
@sergerdn, вы просто видимо не знаете как синхронный код BAS работает в многопотоке, ну вот тогда вам пример sync_code_in_thread.xml, думаю по логу станет понятно)
Также выше я приложил пример с нужной автору темы логикой
-
@GhostZ said in Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке:
... ну вот тогда вам пример sync_code_in_thread.xml, думаю по логу станет понятно)
Офигеть, я считал, что потоки в BAS это параллельное исполнение кода, так как используется термин threads.
А оказывается, у BAS свое понимание параллельности. И, судя по приложенному скрипту,
переключению контекста между потоками происходит после вызова sleep, а не каким то встроенным планировщиком в произвольном порядке. Как обычно бывает в самой Windows, к примеру. Или в пачке языков программирования.Наверное, моя ошибка в том, что я провел параллели в терминах там, где это было не уместно😕
Я замечал ранее, что переключение контекста между потоками происходит по sleep и даже сам использовал этот прием. Вот только неправильно понимал природу его работы.
Спасибо большое за разъяснения, пошел еще раз перечитывать документацию, так как я умудрился пропустить описание такого поведения.
-
@sergerdn, sleep ничего не переключает, просто sleep асинхронная функция, в BAS синхронный код выполняется последовательно, а асинхронный параллельно, sleep используется просто для примера, на его месте может быть любое другое асинхронное действие, работа с браузером, Node.js и т.д
-
@GhostZ said in Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке:
@sergerdn, sleep ничего не переключает, просто sleep асинхронная функция, в BAS синхронный код выполняется последовательно, а асинхронный параллельно, sleep используется просто для примера, на его месте может быть любое другое асинхронное действие, работа с браузером, Node.js и т.д
Да, я это понимаю. Осталось понять, как узнать какой код синхронный, а какой - нет.
Надеюсь, где-то в документации это написано, просто я невнимательно читал/забыл/пропустил/etc. И мой собственный код, вероятно, работал чудом в каких-то моментах.
Так как я постоянно использую "лапшу" из вставок кода на NodeJS и почти не использую встроенные "кубики", то для меня BAS становится весь асинхронный, как я считал до этого топика.
-
@sergerdn said in Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке:
Офигеть, я считал, что потоки в BAS это параллельное исполнение кода, так как используется термин threads.
Да ты офигеть как много считаешь не в тему ... но это лично твоя проблема.
Логика такова - хорошо понимаешь логику работы баса (логику построения кубиков) ? - в тему помогаешь пользователям ? - пользователи развиваются ? - платят разработчику ? ... Развивается софт ? - всем хорошо ?...
Или - пишешь много несуразных постов (горе от ума)? - которые мало кто понимает, засераешь и усложняешь пониманимание для новичков? - меньше пользователей, меньше продаж ... сосем все вместе...
Прежде чем написать - подумай - решаешь ли ты конкретно эту задачу, на сколько ты решаешь эту задачу просто в контексте данного софта ... Нужно ли такое решение ? Ты точно понимаешь какую задачу решаешь? и соответствуют ли твои решения данному софту? ...
-
@DrPrime said in Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке:
Немного не понимаю, почему нельзя синхронизировать всё в OnApplicationStart?
один адекватный ответ ...
-
@mister40mrdoors said in Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке:
@sergerdn said in Запуск приложения в нескольких потоках, но вызов одной функции только в одном потоке:
Офигеть, я считал, что потоки в BAS это параллельное исполнение кода, так как используется термин threads.
Да ты офигеть как много считаешь не в тему ... но это лично твоя проблема.
Логика такова - хорошо понимаешь логику работы баса (логику построения кубиков) ? - в тему помогаешь пользователям ? - пользователи развиваются ? - платят разработчику ? ... Развивается софт ? - всем хорошо ?...
Или - пишешь много несуразных постов (горе от ума)? - которые мало кто понимает, засераешь и усложняешь пониманимание для новичков? - меньше пользователей, меньше продаж ... сосем все вместе...
Прежде чем написать - подумай - решаешь ли ты конкретно эту задачу, на сколько ты решаешь эту задачу просто в контексте данного софта ... Нужно ли такое решение ? Ты точно понимаешь какую задачу решаешь? и соответствуют ли твои решения данному софту? ...
Спасибо за пост. Обязательно учту ваши пожелания.