Справочное руководство по языку Lua 5.1 :: 5.2 - Обработка таблиц
5.2 – Работа с подпрограммами
Операции для работы с подпрограммами собраны в виде подбиблиотеки базовой библиотеки и содержатся внутри таблицы coroutine. См. §2.11 описание подпрограмм.
coroutine.create (f)
Создает новую подпрограмму, с телом f. Параметр f должен быть Lua функцией. Возвращает новую подпрограмму как объект типа нить ( "thread").
coroutine.resume (co [, val1, ···])
Запускает или продолжает выполнение подпрограммы co. При первом использовании этой функции начинает выполняться тело функции. Значения val1, ··· передаются как параметры в эту функцию. Если подпрограмма была в состоянии yield, resume рестартует подпрограмму, передавая ей параметры val1, ··· а также результаты, полученные при вызове yield.
Если подпрограмма запускается без ошибок, resume возвращает true плюс любые значения переданные в yield (если подпрограмма была приостановлена ранее вызовом yield) или любые значения, возвращаемые функцией (если подпрограмма завершилась). В случае возникновения ошибок, resume возвращает false плюс сообщение об ошибке.
coroutine.running ()
Возвращает выполняемую подпрограмму, или nil, если вызвана из главной нити.
coroutine.status (co)
Возвращает статус подпрограммы co, в виде строки: "running" (выполняется), если подпрограмма выполняется (собственно это и есть статус); "suspended" (приостановалена), если подпрограмма приостановлена с помощью вызова yield, либо она еще не запущена на выполнение; "normal" (норма) если подпрограмма активна, но еще не запущена на выполнение (т.е. она активизирована (resume) другой подпрограммой); либо "dead" (остановлена) если подпрограмма завершилась или если остановлена по ошибке.
coroutine.wrap (f)
Создает новую подпрограмму с телом f. Параметр f должен быть Lua функцией. Возвращает функцию, с помощью которой можно активировать подпрограмму. Любые параметры, передаваемые в функцию передаются как дополнительные параметры для resume. Возвращает те же самые значения, возвращаемые resume, кроме первого boolean. В случае ошибки, она передается в вызывающую программу.
coroutine.yield (···)
Приостанавливает выполнение вызываемой подпрограммы. coroutine не может быть выполняющейся C функцией, метаметодом или итератором. Любые параметры, передаваемые в yield в дальнейшем передаются как дополнительные параметры при вызове resume.