Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: АНТИКЛАН on January 05, 2017, 10:40:12 PM

Title: Как проверить что поток остановился?
Post by: АНТИКЛАН on January 05, 2017, 10:40:12 PM
Задался пару дней назад вопросом. Как проверить что поток поставленный на паузу уже остановился и можно продолжать работу. В документации об этом ничего нет. Просто бывают ситуации когда команда на остановку потока уже отработала, а действия из останавливаемого потока как бы довыполняются. Можно конечно решить задержками, но тормозить ими скрипт как то не правильно. Если штатных средств нет то видимо придется свою систему сигналов разрабатывать наверное. Кто что думает? :)
Title: Re: Как проверить что поток остановился?
Post by: Vint on January 06, 2017, 02:49:24 PM
Что значит продолжает выполняться? Примеры бы.
В 4.12 выполнялась только пауза. Какой она может вред принести?. Если большая, разбить на цикл маленьких и проблемы нет.
В 4.13 и паузу пофиксили. Может можно на бету пока перейти или подождать.
Title: Re: Как проверить что поток остановился?
Post by: АНТИКЛАН on January 06, 2017, 08:48:05 PM
Что значит продолжает выполняться? Примеры бы.
В 4.12 выполнялась только пауза. Какой она может вред принести?. Если большая, разбить на цикл маленьких и проблемы нет.
В 4.13 и паузу пофиксили. Может можно на бету пока перейти или подождать.

Как пример(код не привожу так как вне среды назначения он работать все равно не будет):
В первом потоке постоянно нажимается клавиша с интервалом в секунду или две, а во втором по нажатию условной клавиши идет вставка текста в текстовое поле с предварительной остановкой первого потока через SETTHREAD(POTOK1, 0). Так вот примерно в половине случаев в поле попадает и нажатие клавиши из первого потока. Схематично это выглядит так:

    Поток1
        Нажатие клавиши
        Пауза 1 сек
    Конец_Потока1

    Поток2
        Начало_Условия(Если нажата клавиша)
            Остановить Поток1
            Активировать текстовое поле
            Вставить текст в текстовое поле
            Отправить текст
            Запустить Поток 1
        Конец_Условия
    Конец_Потока2
Title: Re: Как проверить что поток остановился?
Post by: Oraven on January 07, 2017, 09:10:51 AM
хорошо бы вставить небольшую задержку после остановки.

Остановить Поток1
WAITMS(50)
Title: Re: Как проверить что поток остановился?
Post by: АНТИКЛАН on January 07, 2017, 02:43:50 PM
хорошо бы вставить небольшую задержку после остановки.

Остановить Поток1
WAITMS(50)

Это то понятно что так можно сделать. Вопрос в том как обойтись без таких разрывов. Сами понимаете что ручное управление хронометражем это всегда гемор в будущем.
Title: Re: Как проверить что поток остановился?
Post by: Vint on January 08, 2017, 09:55:35 PM
Для задач, где применяется кликер, в силу специфики, 50 мс это ничего. В большинстве тормозим сознательно гораздо больше.
Да и не только кликер. Во многих средах где используются аналоги потоков и процессов, они требуют расходов. Расходов времени на синхронизацию и управление. Во многих реальных задачах нельзя получить аналог параллельной работы на 100%, как раз из за сложности распределения задач и потерях на совместных блокировках.