00014. Редактирование main.scm. Потоки и опкоды (Часть 2)
Редактирование main.scm. Потоки и опкоды (Часть 2)|В этом уроке мы продолжим изучать потоки. Урок посвящен запуску нескольких потоков и описаны правила переходов между ними.|wmysterio|wmysterio||||Итак запускать поток мы научились. Давайте научимся запускать несколько потоков одновременно! В CLEO такой возможности нет ( есть аналоги, но сейчас не о этом ), поэтому я вас учу сначала редактировать именно "main.scm". Но ближе к делу. Все потоки запускаются, как уже было сказано с помощью команды create_thread. Теперь в работающем потоке пишем несколько таких команд:
Вот мы выполнили нашу задачу - запустили подряд три потока. Они будут выполнятся одновременно! Смысл в том, что мы "нанимаем" три наших знакомых шарика и они вкалывают на нас. Графически это можно описать так:
С рисунка видно, что работают 3 шарика. При этом потоки могут быть в разных местах, то есть если в начале мы напишем так:
то, работать они будут так же. Разницы нету.
× **ВАЖНО:** Все прыжки должны выполятся только в области своего потока! Это значит нельзя делать прыжки на метки, находящаяся в другом потоке.
Вот вам картинка:
Так что запомним: Шарик знает только себя, выполняет только свою работу. Остальные шарики ему по барабану, как и на их работу. Я бы сказал, что он имеет свою сферу влияния, которая действует только на том потоке, на котором его вызвали. Технически этот шарик к другим потокам обращаться не должен.
Но есть одна особенность в этом случае: если метка для прыжка находится в другом потоке, но от неё идёт комманда прыжка обратно в первый, то ошибки не будет! Вот картинка, что бы вы поняли о чём я:
Дело в том, что Sanny Builder автоматичеки распределяет сферы влияния, а в месте с ними и метки, которые ей принадлежат. Таким образом, метка "POTOK_1_4" автоматически отнесётся к потоку "POTOK", даже, если она находится в середине потока "POTOK_1".
× **ВАЖНО:** Вызывать одного и того же шарика можно много раз, но никак не одновременно. То есть, пока работает поток, вызывать его ещё раз нельзя!
Вот скрин:
Хоть и шарики могут вызываться подряд, но между вызовами есть крохотная задержка. А это значит, что если мы поменяем вызовы местами, то выйдет следующее:
Так что нужно быть внимательным при запуске потоков.
Думаю, Вы заметили, что в последних картинках, в потоке "POTOK_1" в место "end_thread" стоит "jump @POTOK_1". Это значит, что данный поток будет повторяться. Причём бесконечно! Но о бесконечности мы поговорим в следующих уроках.
В общем, если запускать потоки, которые будут работать одновременно, советую не делать "create_thread" с разных потоков, что бы избежать все возможных ошибок и глюков.|1467|1|0|74148405png
1117552
400197``\|50899820
png934
496400
212\|97405113`png`406`516`393`500
|90162325png
379`457
`||redaktirovanie_main_scm_potoki_i_opkody_chast_2|1498204687
Last updated