基础
1.lua将所有关于协同程序的函数放置在一个名为“coroutine”的table中。
2.常用接口:
--常用接口
--[[
1.创建一个协同程序,只有一个参数,参数为一个函数
补充:当创建一个协同程序时,它处于挂起状态,也就是说,协同程序不会在创建它时自动执行其内容
后面会讲检查协同程序状态的接口
2.检查协同程序的状态,参数为协同程序
coroutine.status(co)
3.协同程序的挂起,只有协同程序的主函数才能调用类似于yield这样的函数。
coroutine.yield()
4.协同程序的唤醒
coroutine.resume(co)
--]]
local co = coroutine.create(function()
print("hi")
end)
print(coroutine.status(co)) -->suspended
print(co) -->thread: 000000001EC4EF00
coroutine.resume(co) --> hi
print(coroutine.status(co)) -->dead
------------------------------------------------------------------------
3.。前面的简单的例子,看上去还只是一种复杂的函数调用方法,其实协同程序的强大之处在于函数yield的使用上,该函数可以让一个运行中的协同程序挂起,而之后可以再恢复它的运行。
--[[
协同程序创建
--]]
local co = coroutine.create(function()
for i = 1, 10 do
print("co", i)
coroutine.yield()
end
end)
for i = 1, 11 do
coroutine.resume(co) -->1到10会打印,第11次什么都不打印
end
--[[
在最后一次调用resume时,协同程序的内容已经执行完毕,并已经返回
--]]
4.lua的协同程序还具有一项有用的机制
管道(pipe)与过滤器(filter)