Подпрограммы создаются вызовом coroutine.create. Единственным аргументом является имя главной функции подпрограммы. Функция create только создает новую подпрограмму и возвращает указатель на нее (объект типа thread), запуск подпрограммы не выполняется. При вызове функции coroutine.resume и передаче ей в качестве первого аргумента результата вызова coroutine.create, процедура запускается на выполнение с первого оператора ее главной функции. Остальные параметры из вызова coroutine.resume передаются в основную функцию подпрограммы. После запуска подпрограмма выполняется до завершения либо до вызова yields. Для приостановки выполнения попрограммы используется функция coroutine.yield Функция coroutine.wrap создает подпрограмму и осуществляет ее запуск. co = coroutine.create(function(a,b) print(a,b) coroutine.yield(3,4) return a+10 end ) print(coroutine.resume(co,1,2)) print(coroutine.resume(co,1,2)) 1 2 true 3 4 true 11 -- Создает новую подпрограмму, с телом f coroutine.create(f) -- Возвращает выполняемую подпрограмму (или nil в главной нити) coroutine.running() -- "running" (выполняется), "suspended" (приостановалена), -- "normal" (норма) если подпрограмма активна, но еще не запущена на выполнение, -- "dead" (остановлена) если подпрограмма завершилась coroutine.status(co) coroutine.wrap(f) coroutine.yield(···)
Lua Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor