Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: MerlinUA on December 02, 2015, 09:30:01 PM
-
Всем доброго времени суток, вот мучаюсь, как полностью остановить поток.
Нужно начать работу потока сначала, а не приостанивить, а позже возобновить его, как это реализовано в кликере. Помогите, пожалуйста, кто сталкивался!
THREAD(thr_name,1)
LOGWRITE("1")
WAIT(1)
LOGWRITE("2")
WAIT(1)
LOGWRITE("3")
WAIT(1)
LOGWRITE("4")
WAIT(1)
LOGWRITE("5")
WAIT(1)
LOGWRITE("6")
waitms(10)
END_THREAD
WAIT(3)
SETTHREAD(thr_name,0)
WAIT(1)
LOGWRITE("ОСНОВНОЙ ПОТОК")
WAIT(1)
SETTHREAD(thr_name,1)
WAIT(5)
halt
Что получилось:
8:25:17 PM 1
8:25:18 PM 2
8:25:19 PM 3
8:25:20 PM 4
8:25:21 PM Основной поток
8:25:22 PM 5
8:25:23 PM 6
Что должно получиться:
8:25:17 PM 1
8:25:18 PM 2
8:25:19 PM 3
8:25:20 PM 4
8:25:21 PM Основной поток
8:25:22 PM 1
8:25:23 PM 2
-
Никак не реализовано пока, доступна только пауза.
-
Никак не реализовано пока, доступна только пауза.
Спасибо, буду думать как по другому сделать)
-
ты же мерлин, взмахни палочкой скажи трах-тибидох и сделается по другому. я вот недумая вижу два способа запускать потоки поставленные на паузу из любого выбранного места потока, но сохраню интригу, чтоб не лишать народ радости творчества и надеюсь что найденные способы будут проще и красивее моих, если конечно подумать нужным местом. :-X
Я новичок, не так шарю как вы. Если можете - помогите, пожалуйста.
-
ты же мерлин, взмахни палочкой скажи трах-тибидох и сделается по другому. я вот недумая вижу два способа запускать потоки поставленные на паузу из любого выбранного места потока, но сохраню интригу, чтоб не лишать народ радости творчества и надеюсь что найденные способы будут проще и красивее моих, если конечно подумать нужным местом. :-X
Во блин. А я чёт ни одного не вижу ;D Протри мне глаза.
Может я сильно погрузился в питон и в кликере замылился глаз.
-
ты же мерлин, взмахни палочкой скажи трах-тибидох и сделается по другому. я вот недумая вижу два способа запускать потоки поставленные на паузу из любого выбранного места потока, но сохраню интригу, чтоб не лишать народ радости творчества и надеюсь что найденные способы будут проще и красивее моих, если конечно подумать нужным местом. :-X
Во блин. А я чёт ни одного не вижу ;D Протри мне глаза.
Может я сильно погрузился в питон и в кликере замылился глаз.
Мне кажеться, что тут можно goto использовать, но как - не могу понять.
-
ты же мерлин, взмахни палочкой скажи трах-тибидох и сделается по другому. я вот недумая вижу два способа запускать потоки поставленные на паузу из любого выбранного места потока, но сохраню интригу, чтоб не лишать народ радости творчества и надеюсь что найденные способы будут проще и красивее моих, если конечно подумать нужным местом. :-X
Во блин. А я чёт ни одного не вижу ;D Протри мне глаза.
Может я сильно погрузился в питон и в кликере замылился глаз.
Мне кажеться, что тут можно goto использовать, но как - не могу понять.
А ты не пробовал IF использовать?
THREAD(thr_name,1)
IF($a=1)
LOGWRITE("1")
WAIT(1)
LOGWRITE("2")
WAIT(1)
LOGWRITE("3")
WAIT(1)
LOGWRITE("4")
WAIT(1)
LOGWRITE("5")
WAIT(1)
LOGWRITE("6")
waitms(10)
END_IF
END_THREAD
-
ты же мерлин, взмахни палочкой скажи трах-тибидох и сделается по другому. я вот недумая вижу два способа запускать потоки поставленные на паузу из любого выбранного места потока, но сохраню интригу, чтоб не лишать народ радости творчества и надеюсь что найденные способы будут проще и красивее моих, если конечно подумать нужным местом. :-X
Во блин. А я чёт ни одного не вижу ;D Протри мне глаза.
Может я сильно погрузился в питон и в кликере замылился глаз.
Мне кажеться, что тут можно goto использовать, но как - не могу понять.
А ты не пробовал IF использовать?
THREAD(thr_name,1)
IF($a=1)
LOGWRITE("1")
WAIT(1)
LOGWRITE("2")
WAIT(1)
LOGWRITE("3")
WAIT(1)
LOGWRITE("4")
WAIT(1)
LOGWRITE("5")
WAIT(1)
LOGWRITE("6")
waitms(10)
END_IF
END_THREAD
Но если остановить поток, он начнеться с того же места, независимо от значения переменной.
-
ты же мерлин, взмахни палочкой скажи трах-тибидох и сделается по другому. я вот недумая вижу два способа запускать потоки поставленные на паузу из любого выбранного места потока, но сохраню интригу, чтоб не лишать народ радости творчества и надеюсь что найденные способы будут проще и красивее моих, если конечно подумать нужным местом. :-X
Во блин. А я чёт ни одного не вижу ;D Протри мне глаза.
Может я сильно погрузился в питон и в кликере замылился глаз.
Мне кажеться, что тут можно goto использовать, но как - не могу понять.
А ты не пробовал IF использовать?
THREAD(thr_name,1)
IF($a=1)
LOGWRITE("1")
WAIT(1)
LOGWRITE("2")
WAIT(1)
LOGWRITE("3")
WAIT(1)
LOGWRITE("4")
WAIT(1)
LOGWRITE("5")
WAIT(1)
LOGWRITE("6")
waitms(10)
END_IF
END_THREAD
$a=1
THREAD(1,1)
IF($a=1)
LOGWRITE("1")
WAIT(1)
LOGWRITE("2")
WAIT(1)
LOGWRITE("3")
WAIT(1)
LOGWRITE("4")
WAIT(1)
LOGWRITE("5")
WAIT(1)
LOGWRITE("6")
waitms(10)
END_IF
END_THREAD
WAIT(3)
SETTHREAD (1, 0)
LOGWRITE("Stop")
WAIT(1)
$a=0
SETTHREAD (1, 1)
WAIT(5)
halt
Что получилосЬ:
7:52:42 PM 1
7:52:43 PM 2
7:52:44 PM 3
7:52:45 PM Stop
7:52:46 PM 4
7:52:47 PM 5
7:52:48 PM 6
Может я не так понял?
-
Можно попробовать "обскакать проблему на костылях", и конечно же с GOTO ( куда же без него :) ).
LOGCLEAR
THREAD(thr_name,1)
SUB(R)
IF($R = 1)
$R = 0
GOTO(start)
END_IF
END_SUB
start:
// Здесь действия, отменяющие последствия прошлого (не законченного) выполнения команд в этом потоке.
// Например: если была выпонена команда KEYDOWN(#A), то здеь нужно отменить это действие командой KEYUP(#A).
R()
LOGWRITE("1")
R()
WAIT(1)
R()
LOGWRITE("2")
R()
WAIT(1)
R()
LOGWRITE("3")
R()
WAIT(1)
R()
LOGWRITE("4")
R()
WAIT(1)
R()
LOGWRITE("5")
R()
WAIT(1)
R()
LOGWRITE("6")
R()
WAIT(5)
GOTO(start)
END_THREAD
WAIT(3)
SETTHREAD(thr_name,0)
$R = 1
// Здесь действия, отменяющие последствия прошлого (не законченного) выполнения команд в дочернем потоке "thr_name".
// Например: если была выпонена команда KEYDOWN(#A), то здеь, вероятно, нужно отменить это действие командой KEYUP(#A).
LOGWRITE("ОСНОВНОЙ ПОТОК")
WAIT(1)
SETTHREAD(thr_name,1)
WAIT(2)
HALT
-
Только не с сабом. Условие с гото после каждой команды.
Это единственное что приходит на ум. Но это же мама родная и пройдёт если поток всего на десяток строк.
Это не наш метод.
-
Только не с сабом. Условие с гото после каждой команды.
Это единственное что приходит на ум. Но это же мама родная и пройдёт если поток всего на десяток строк.
Это не наш метод.
Я вот тоже слепил и это явно не подходит. Сильно тормозит всю программу. Едиственый разумный выход из ситуации, который я нашел, это создать много одинаковых потоков и вызывать все поочереди(благо это нужно делать не очень много раз). Код конечно корявый, но программа работает шустро.
P.S. Всем спасибо за ответы!!
-
к каждой команде ненужно, а вот дописать условие с флагом " невыполнять" можно к каждому циклу и условию или включить в условие крупные блоки команд
Это и так ясно, но зависит от кода. Иногда прийдётся практически к каждой.
можно использовать инклуды с выше предложенным кодом и гото, это решит проблему выскакивания из сабов всего одной строкой.
Такое использование инклюдов... в принципе вариант. Но я их использую классически, для подключения подпрограмм или записанных блоков. Если в инклюде будет одно условие, то не страшно и меньше мусора будет.
Это всё костыли. Джонни бы этот вопрос решил очень просто и удобно.