@Ranout а чем не устраивает модуль CaptchaCustom выложенный на форуме? Он сделает за вас сам все, только потом нужно токен вписать ну или найти каллбэк функцию куда его добавить.
Не могу продумать алгоритм, чтобы потоки останавливались, пока происходит переключение vpn
-
Все привет!
Разрабатываю софт для просмотра рекламы, который использует OpenVPN
Реализовал функцию которая запускается из main с помощью "Вызов функции в несколько потоков", в функции прописано условие, при котором должно происходить переключение vpn, я хочу реализовать что-то по типу ожидания завершения потоков, чтобы каждый поток завершил текущий просмотр и не начинал новый пока vpn не переключиться на новую конфигурацию. Моя реализация следующая:


Использовал тот же самый принцип с глобальными переменными, но для постоянного мониторинга выносил это в отдельную асинхронную функцию
Я считаю, что это достаточно криво и буду рад, если кто-то сможет подсказать более оптимальное решение -
Если делать по уму, то нужен массив в глобальной переменной или ресурсе, в котором каждый поток будет хранить своё состояние, а vpn-функция, на основании этого, будет решать, что ей делать.
-
@JImk4 said in Не могу продумать алгоритм, чтобы потоки останавливались, пока происходит переключение vpn:
Я считаю, что это достаточно криво и буду рад, если кто-то сможет подсказать более оптимальное решение
Нет в BAS встроенных mutex.
Можешь оформить свое решение в виде модуля, будет выглядеть красиво, но под капотом будет все ровно тоже самое.
Я для себя так и сделал. Пока я не освобожу mutex, другие потоки ждут очереди, пока не смогут его захватить.
Так как у меня именованные mutex, то я могу городить их сколько угодно в своем коде с разными именами в разных местах.
С таким подходом есть подводные камни - если я не освобожу mutex. Например, будет ошибка в потоке, что его захватил, то все потоки будут вечно ждать.



-
@sergerdn То есть ты хочешь сказать, что мой алгоритм не так плох, но для удобства лучше обернуть это все в отдельный модуль? Просто я думал, что это своеобразный костыль и можно сделать как-то по другому, но в голову ничего другого не приходит
-
@JImk4 said in Не могу продумать алгоритм, чтобы потоки останавливались, пока происходит переключение vpn:
@sergerdn То есть ты хочешь сказать, что мой алгоритм не так плох
Да.
@JImk4 said in Не могу продумать алгоритм, чтобы потоки останавливались, пока происходит переключение vpn:
но для удобства лучше обернуть это все в отдельный модуль?
Да.
Но я это делаю в том числе, потому что можно написать отдельный тест на этот модуль.
Так как у меня ограниченные знания BAS, то я пишу функциональные тесты, чтобы проверить точно ли оно работает, как я ожидаю.Дополнительно нужда в блокировках не редкая вещь, поэтому можно таскать из проекта в проект однажды написанный модуль.
И обновление модуля тоже упрощенное, нужно всего лишь после обновления модуля открыть все проекты, что его используют и они его обновят автоматически из папки BAS.
В данном случае нужен тест точно ли происходит блокировка, то есть другие потоки ничего не делают, если какой-то поток не захватил mutex.
Хотя бы по логам будет видно.Я пишу множество логов, так как если обернуть функционал в модуль, то потеряются номера кубиков и в будущем будет сложно понять где что пошло не так. Да и вообще логи сильно помогают в поиске ошибок.
P.S.
Это на словах звучит все красиво, в реальности же у меня целый комбайн который обрабатывает код модуля после автоматического билда его в BAS. -
@JImk4 тестировал как-то многопоток с синхронизацией через ресурс, отказался в пользу глобальной переменной, но вам может подойти:
chkMultiTH.xml -
я бы наверное попросил админа реализовать такую штуку - чтобы по окончании какого-то определенного количества потоков их можно было паузнуть все, потом заменить впн(или прокси, или что там еще можно) и после этого, только после проверки пинга что "интернет опять есть"(потому что у меня например на серваке при переключении впн интернет подходит только через минуту-две, я хз почему) дальше продолжал работу
да, если будешь просить чтоб он это реализовал скажи чтоб еще тогда както это добавил в вариант если интернет пропал, чтоб они тоже останавливались и, возможно, алертовали что "мы перестали работать"
кстати, а как ты переключение впн реализовал из баса, подскажи. тоже думал над этим но пока не делали
-
@basuser123 said in Не могу продумать алгоритм, чтобы потоки останавливались, пока происходит переключение vpn:
я бы наверное попросил админа реализовать такую штуку
Мсье оптимист
:D -
M Moderator moved this topic from Off topic on
-
M Moderator moved this topic from Other