(Решено) Организация очереди между потоками



  • Здравствуйте! Прошу помочь с организацией очереди между потоками.
    Задача такая: есть несколько потоков, которые подключаются к прокси. Как только один из потоков начинает подключение, должна сработать пауза 15 секунд прежде чем другой поток начнет подключение к прокси. Осложняет все то что потоки иногда могут запросить подключение к прокси одновременно и в это время их нужно выстроить в очередь. Некоторые варианты я представляю, например можно выделить отдельный поток на создания листа и через глобальные переменные сообщать готовность потока к подключению. Но тут уже возникают другие вопросы, например как выделить в глобальной переменной название потока и т.д. Возможно задача не такая уж и сложная, но все равно было бы интересно прочитать возможные варианты реализации. Некоторое логическое представление уже было бы очень полезно.



  • @spacerange said in Организация очереди между потоками:

    Здравствуйте! Прошу помочь с организацией очереди между потоками.
    Задача такая: есть несколько потоков, которые подключаются к прокси. Как только один из потоков начинает подключение, должна сработать пауза 15 секунд прежде чем другой поток начнет подключение к прокси. Осложняет все то что потоки иногда могут запросить подключение к прокси одновременно и в это время их нужно выстроить в очередь. Некоторые варианты я представляю, например можно выделить отдельный поток на создания листа и через глобальные переменные сообщать готовность потока к подключению. Но тут уже возникают другие вопросы, например как выделить в глобальной переменной название потока и т.д. Возможно задача не такая уж и сложная, но все равно было бы интересно прочитать возможные варианты реализации. Готвое решение не нужно, а лишь некоторое логическое представление уже было бы очень полезно.

    1350.xml



  • @Fox Забавно, я сделал все тоже самое как у вас, но у меня потоки иногда все равно подключались вместе. И скорее всего дело было в том что я пытался создавать глобальную переменную на старте каждого потока с отслеживанием первого запуска, возможно там я где то ошибся. В вашем же примере переменная создается в OnApplicationStart, попробую применить это в своем скрипте, спасибо!



  • @Fox Хотя нет, похоже что проблема в том что While при изменении глобальной переменной сразу выпускает все потоки которые находятся на ожидании одновременно.



  • @spacerange said in Организация очереди между потоками:

    @Fox Хотя нет, похоже что проблема в том что While при изменении глобальной переменной сразу выпускает из цикла все потоки одновременно которые находятся на ожидании.

    Эмм? Вы про мой скрипт или про свой? Я мельком тестировал свой вариант, ошибок не было



  • @Fox said in Организация очереди между потоками:

    @spacerange said in Организация очереди между потоками:

    @Fox Хотя нет, похоже что проблема в том что While при изменении глобальной переменной сразу выпускает из цикла все потоки одновременно которые находятся на ожидании.

    Эмм? Вы про мой скрипт или про свой? Я мельком тестировал свой вариант, ошибок не было

    Да я сам что - то не пойму, у меня в скрипте тоже самое один в один, запускаю свой у меня во время подключения стартует сразу несколько потоков, в вашем вроде такого нет. Может заработался, постараюсь разобраться.



  • @Fox said in Организация очереди между потоками:

    @spacerange said in Организация очереди между потоками:

    @Fox Хотя нет, похоже что проблема в том что While при изменении глобальной переменной сразу выпускает из цикла все потоки одновременно которые находятся на ожидании.

    Эмм? Вы про мой скрипт или про свой? Я мельком тестировал свой вариант, ошибок не было

    Немного переместил таймеры и все заработало, ещё раз спасибо.



  • по моему достаточно установить паузу в ресурсе на ипользование не чаще чем раз в 15 сек.Или я что то путаю?



  • @xtra Да, можно и через ресурсы похожее настроить, но в моем случае есть некоторые условия по которым данный способ не подходит. Например если поставить паузу между использованиями, то BAS выдаст свободную строчку потоку, а мне нужно чтобы все остальные потоки ждали пока подключается один.


Log in to reply