Как из одного потока, закрыть другой?



  • Всем привет.

    Есть скрипт, который выполняет действия. В этом скрипте запущена асинхронная функция, которая параллельно скрипту чекает глобальную переменную.
    После изменения глобальной переменной, нужно чтобы функция закрыла, остановила или перезагрузила поток из которого она запущена.

    Пример:
    Регистратор аккаунтов запущен на 1 модеме в 4 потока.
    У каждого потока, запущена своя асинхронная функция, которая ждёт, когда изменится глобальная переменная.
    Поток 1 завершает регистрацию и меняет глобальную переменную.
    В асинхронной функции это заметили.

    Вопрос
    Как из асинхронной функции остановить поток, которому она принадлежит?

    Спасибо.



  • @IdAlexBlack По идее вот так
    5b340fc3-3fa9-45dc-b4f4-6c51ed0a51a4-image.png
    Если я правильно понял вопрос.



  • @Lipstein К сожалению все эти действия выполняются только внутри потока.

    Асинхронная функция, создаёт отдельный поток.

    Спасибо.



  • @IdAlexBlack Функция, запущенная асинхронно, создаёт свой поток. То есть, если вы из функции "Main" асинхронно запускаете некую функцию "example", то все действия из функции "example" будут выполняться в отдельном потоке. Соответственно, если действия "fail" или "success" буду при определённых условиях вызываться в функции "example", то они будут прерывать именно тот поток, в котором эта функция выполняется. То есть в вашем случае, это будет НЕ основной поток.



  • @IdAlexBlack said in Как из одного потока, закрыть другой?:

    Всем привет.

    Есть скрипт, который выполняет действия. В этом скрипте запущена асинхронная функция, которая параллельно скрипту чекает глобальную переменную.
    После изменения глобальной переменной, нужно чтобы функция закрыла, остановила или перезагрузила поток из которого она запущена.

    Пример:
    Регистратор аккаунтов запущен на 1 модеме в 4 потока.
    У каждого потока, запущена своя асинхронная функция, которая ждёт, когда изменится глобальная переменная.
    Поток 1 завершает регистрацию и меняет глобальную переменную.
    В асинхронной функции это заметили.

    Вопрос
    Как из асинхронной функции остановить поток, которому она принадлежит?

    Спасибо.

    "Прервать асинхронную функцию" возможно только вызванную через действие "Вызов функции асинхронно" зная при этом id необходимого потока



  • @Fox
    Мне нужно завершить именно мейн функцию, так как в асинхронном потоке сменилась глобальная переменная и мне нужно рестартануть то, что происходит в мейн потоке.

    В мейн потоке идёт рега и нужно чтобы она перезапустилась с нуля.



  • @IdAlexBlack said in Как из одного потока, закрыть другой?:

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

    В мейн потоке идёт рега и нужно чтобы она перезапустилась с нуля.

    в таком случае проверяйте содержимое глобальной переменной. Но мой вам совет, пересмотрите логику скрипта, опыт подсказывает, что вы скорее всего городите огород



  • @DoctorKrolic Да, я это знаю. Всё перечитал уже. )))

    Поэтому хочется иметь возможность из одного потока завершить другой поток.



  • @Fox
    Возможно да.
    Но у меня есть 4 потока.

    1 завершил регистрацию.
    Как перезапустить остальные 3 потока по другому?



  • @IdAlexBlack said in Как из одного потока, закрыть другой?:

    @Fox
    Возможно да.
    Но у меня есть 4 потока.

    1 завершил регистрацию.
    Как перезапустить остальные 3 потока по другому?

    Вы пытаетесь решить задачу, которую вы сами себе поставили неправильной логикой решения изначальной задачи. Для чего всё это, что вы хотите сделать в итоге?



  • @Fox said in Как из одного потока, закрыть другой?:

    @IdAlexBlack said in Как из одного потока, закрыть другой?:

    @Fox
    Возможно да.
    Но у меня есть 4 потока.

    1 завершил регистрацию.
    Как перезапустить остальные 3 потока по другому?

    Вы пытаетесь решить задачу, которую вы сами себе поставили неправильной логикой решения изначальной задачи. Для чего всё это, что вы хотите сделать в итоге?

    Ох уж эта логика )))



  • @Fox
    Задача логичная. )))

    Регистрация идёт в 4 потока на одном модеме из-за того что маленький пробив.

    После зарегистрированного аккаунта, поток перезагружает модем, а остальные потоки не могут продолжить регистрацию, так как внешний IP сменился.

    Именно поэтому я чекаю перезагружен модем или нет.

    Если перезагрузился, я должен начать заново все потоки.

    Как-то так. )))



  • @UserTrue said in Как из одного потока, закрыть другой?:

    @Fox said in Как из одного потока, закрыть другой?:

    @IdAlexBlack said in Как из одного потока, закрыть другой?:

    @Fox
    Возможно да.
    Но у меня есть 4 потока.

    1 завершил регистрацию.
    Как перезапустить остальные 3 потока по другому?

    Вы пытаетесь решить задачу, которую вы сами себе поставили неправильной логикой решения изначальной задачи. Для чего всё это, что вы хотите сделать в итоге?

    Ох уж эта логика )))

    Пользователи строят логику скрипта отталкиваясь от имеющихся знаний и зачастую сами себе создают проблемы. А вопросы задают исключительно как решить именно последнюю проблему.

    @IdAlexBlack said in Как из одного потока, закрыть другой?:

    @Fox
    Задача логичная. )))

    Регистрация идёт в 4 потока на одном модеме из-за того что маленький пробив.

    После зарегистрированного аккаунта, поток перезагружает модем, а остальные потоки не могут продолжить регистрацию, так как внешний IP сменился.

    Именно поэтому я чекаю перезагружен модем или нет.

    Если перезагрузился, я должен начать заново все потоки.

    Как-то так. )))

    Используйте цикл в main, который проверяет "пробив", если "пробив" есть, то поток завершает все вызванные потоки, перезагружает модем и снова запускает потоки. Для чего перезапуск то?



  • @Fox said in Как из одного потока, закрыть другой?:

    Пользователи строят логику скрипта отталкиваясь от имеющихся знаний и зачастую сами себе создают проблемы. А вопросы задают исключительно как решить именно последнюю проблему.

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



  • @UserTrue said in Как из одного потока, закрыть другой?:

    @Fox said in Как из одного потока, закрыть другой?:

    Пользователи строят логику скрипта отталкиваясь от имеющихся знаний и зачастую сами себе создают проблемы. А вопросы задают исключительно как решить именно последнюю проблему.

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

    Это применимо почти ко всему, я так угловой шкаф собирал :D



  • @Fox Перезапуск, как я писал выше, из-за того, что из-за смены IP рега не идёт дальше.

    Я пробовал создавать скрипт через вызов функции в несколько потоков, но почему-то мейн не завершает потоки, созданные в функции.



  • @Fox нашёл более точное описание того, что нужно. Ваш комментарий там тоже есть.

    https://community.bablosoft.com/topic/2239/принудительное-завершение-потока



  • @IdAlexBlack said in Как из одного потока, закрыть другой?:

    @Fox Перезапуск, как я писал выше, из-за того, что из-за смены IP рега не идёт дальше.

    Я пробовал создавать скрипт через вызов функции в несколько потоков, но почему-то мейн не завершает потоки, созданные в функции.

    Я повторю:

    @Fox said in Как из одного потока, закрыть другой?:

    "Прервать асинхронную функцию" возможно только вызванную через действие "Вызов функции асинхронно" зная при этом id необходимого потока

    прервать по другому нельзя. Вызов функции в несколько поток прервать можно всю через действие "Прервать Скрипт"

    8ba3dc4f-5689-4eda-b6dd-707992d331d0-изображение.png

    41c749a0-c3f7-459c-9b12-fb8d1575b8ad-изображение.png

    Тестовый скрипт



  • @Fox Кажется этот вариант мне подходит.

    Спасибо огромное.

    По результатам отпишу тут.


Log in to reply