# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00300/00014.-redaktirovanie-main.scm.-potoki-i-opkody-chast-2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
