coroutine library
coroutine.create (f
)
Создает новый сопроцесс, с телом f. f должен быть функцией. Возвращает этот новый сопроцесс, как объект с типом "thread".
coroutine.isyieldable ()
Возвращает true, когда запущенный сопроцесс может уступить.
Запущенный сопроцесс может уступать, если это не главный поток и он не внутри неприостанавливаемой C функции.
coroutine.resume (co [, val1, ···]
)
Начинает или продолжает выполнение сопроцесса co. При первом возобновлении сопроцесса запускает его тело. Значение val1, … передаются как аргументы телу сопроцесса (его функции). Если сопроцесс был приостановлен, resume перезапускает его; значниния val1, … передаются как результаты из yield.
Если сопроцесс запущен без ошибок, resume возвращает true и все значения, переданные в yield (когда сопроцесс уступает) или все значения, возвращенные функцией сопроцесса (когда сопроцесс завершается). В случае ошибок, resume возвращает false и сообщение об ошибке.
coroutine.running ()
Возвращает запущенный сопроцесс и логическое значение; true, если сопроцесс это главный поток.
coroutine.status (co
)
Возвращает статус сопроцесса co, как строку: "running" — сопроцесс запущен (т.е. он вызвал status); "suspended" — сопроцесс приостановлен в вызове yield или еще не запущен; "normal" — сопроцесс активен, но не выполняется (т.е. он был продолжен другим сопроцессом); "dead" — сопроцесс завершил своё тело или был остановлен с ошибкой.
coroutine.wrap (f
)
Создает новый сопроцесс с телом f. f должен быть функцией. Возвращает функцию, которая возобновляет сопроцесс при каждом её вызове. Все аргументы, переданные этой функции, ведут себя как дополнительные аргументы в resume. Возвращает те же значения, что и resume, за исключением первого логического значения. В случае ошибки, распространяет ошибку.
coroutine.yield (···
)
Приостанавливает выполнение вызывающего сопроцесса. Все аргументы yield передаются, как дополнительные результаты в resume.