Author Topic: потоки  (Read 1324 times)

0 Members and 1 Guest are viewing this topic.

LLlteйn

  • Освоившийся
  • **
  • Posts: 58
    • View Profile
потоки
« on: February 18, 2018, 09:35:36 PM »
Здравствуйте, скажите пожалуйста:
1. можно свои шаблоны добавить в кликер, если да то как?
2. могли бы вы мне подсказать про потоки в кликере как они устроены и как их правильно использовать (на сколько я понимаю кликер может выполнять основной скрипт (находящийся в первом потоке), а если появится один из заданных параметров второго потока он может приостановить первый, выполнить заданное условие и возобновить работу первого патока) верно?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: потоки
« Reply #1 on: February 19, 2018, 08:23:26 AM »
1. Можно. Файл "\data\lang\ru\qinsert_menu.txt" отвечает за меню команд. А в папке "\data\lang\ru\templates\" собраны шаблоны скриптов в обычном txt формате. Ты можешь добавить свои скрипты, только не забудь перезапустить кликер.

2. В кликере есть основной поток, его нельзя остановить командами кликера.
Дополнительные потоки создаются функцией THREAD. Описание потока не может быть никуда вложено. Из потока нельзя выпрыгнуть через ГОТО. Если в потоке используется подпрограмма то описание подпрограммы должно быть включено в поток. При этом GETSCREEN и переменные являются общими для всех потоках, изоляции для них нет.
Code: (clickermann) [Select]
THREAD(name, 1)
   // тело
END_THREAD

Управлять потоком можно командой SETTHREAD.
Code: (clickermann) [Select]
SETTHREAD (name, 0) // 0 - Пауза, 1 - Старт, 2 - Стоп
Вжно! В 4.12 версии кликера есть бог потока, если остановить поток SETTHREAD (name, 2) а потом запустить его SETTHREAD (name, 1) то в этом потоке перестает воспроизводиться первая строка. Лечится вписыванием первой строкой какой нибудь команды, например WAIT(0). В последней 4.13 бета версии это исправлено.

Можно протестировать таким скриптом
Code: (clickermann) [Select]
THREAD(name, 1)
   LOGWRITE ("1")
   LOGWRITE ("2")
   LOGWRITE ("3")
   WAIT(1)
END_THREAD

LOGSHOW (1)
WAIT(2)
SETTHREAD (name, 2) // останавливаем
WAIT(3)
SETTHREAD (name, 1) // запускаем (поток начнется сначала)
WAIT(3)

Видел скрипты состоящие только из потоков, это не правильно в основном потоке должна быть пауза, ведь он тоже крутится.