> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00100/00300/00014.-redaktirovanie-main.scm.-potoki-i-opkody-chast-2.md).

# 00014. Редактирование main.scm. Потоки и опкоды (Часть 2)

Редактирование main.scm. Потоки и опкоды (Часть 2)|В этом уроке мы продолжим изучать потоки. Урок посвящен запуску нескольких потоков и описаны правила переходов между ними.|wmysterio|wmysterio||||Итак запускать поток мы научились. Давайте научимся запускать несколько потоков одновременно! В CLEO такой возможности нет ( есть аналоги, но сейчас не о этом ), поэтому я вас учу сначала редактировать именно "main.scm". Но ближе к делу. Все потоки запускаются, как уже было сказано с помощью команды **create\_thread**. Теперь в работающем потоке пишем несколько таких команд:

```
// ...
create_thread @POTOK
create_thread @POTOK_1
create_thread @POTOK_2
end_thread 

:POTOK
thread 'POTOK'
wait 0 
jump @POTOK_5

:POTOK_5
wait 0
end_thread

:POTOK_1
thread 'POTOK_1'
wait 0 
jump @POTOK_1_4

:POTOK_1_4
wait 0
end_thread

:POTOK_2
thread 'POTOK_2'
wait 0 
jump @POTOK_2_3

:POTOK_2_3
wait 0
end_thread 
```

Вот мы выполнили нашу задачу - запустили подряд три потока. Они будут выполнятся одновременно! Смысл в том, что мы "нанимаем" три наших знакомых шарика и они вкалывают на нас. Графически это можно описать так:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/74148405.png)

С рисунка видно, что работают 3 шарика. При этом потоки могут быть в разных местах, то есть если в начале мы напишем так:

```
create_thread @POTOK
create_thread @POTOK_3
create_thread @POTOK_2
```

то, работать они будут так же. Разницы нету.

× \*\*ВАЖНО:\*\* Все прыжки должны выполятся только в области своего потока! Это значит нельзя делать прыжки на метки, находящаяся в другом потоке.

Вот вам картинка:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/50899820.png)

Так что запомним: Шарик знает только себя, выполняет только свою работу. Остальные шарики ему по барабану, как и на их работу. Я бы сказал, что он имеет свою сферу влияния, которая действует только на том потоке, на котором его вызвали. Технически этот шарик к другим потокам обращаться не должен.

Но есть одна особенность в этом случае: если метка для прыжка находится в другом потоке, но от неё идёт комманда прыжка обратно в первый, то ошибки не будет! Вот картинка, что бы вы поняли о чём я:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/97405113.png)

Дело в том, что Sanny Builder автоматичеки распределяет сферы влияния, а в месте с ними и метки, которые ей принадлежат. Таким образом, метка "POTOK\_1\_4" автоматически отнесётся к потоку "POTOK", даже, если она находится в середине потока "POTOK\_1".

× \*\*ВАЖНО:\*\* Вызывать одного и того же шарика можно много раз, но никак не одновременно. То есть, пока работает поток, вызывать его ещё раз нельзя!

Вот скрин:

![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/0/90162325.png)

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

![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/0/59927369.png)

Так что нужно быть внимательным при запуске потоков.

Думаю, Вы заметили, что в последних картинках, в потоке "POTOK\_1" в место "end\_thread" стоит "jump @POTOK\_1". Это значит, что данный поток будет повторяться. Причём бесконечно! Но о бесконечности мы поговорим в следующих уроках.

В общем, если запускать потоки, которые будут работать одновременно, советую не делать "create\_thread" с разных потоков, что бы избежать все возможных ошибок и глюков.|1467|1|0|74148405`png`1117`552`400`197``\|50899820`png`934`496`400`212``\|97405113`png`406`516`393`500``|90162325`png`379\`457

```
`\|59927369`png`318`468
```

\`||redaktirovanie\_main\_scm\_potoki\_i\_opkody\_chast\_2|1498204687
