Lua 通过 table 提供了所有的协同函数,
create 函数创建一个新的协同程序,
create只有一个参数:
协同程序将要运行的代码封装而成的函数,返回值为thread类型的值。
通常情况下 create 的参数是一个匿名
co = coroutine.create(function ()
print("hello")
end)
print(co) --> thread: 0x8071d98
协同有三个状态:挂起态,运行态,停止态。
当创建协同程序时开始状态为挂起态,即创建后不会自动运行,
用status 函数检查协同的状态:
如:
print(coroutine.status(co)) --> suspended
挂起状态变为运行态:coroutine.resume
coroutine.resume(co) --> hello
这个例子中,协同体打印出"hello"之后便进入终止状态:
print(coroutine.status(co)) --> dead
挂起函数yield 。将正在运行的代码挂起,
如下代码:
co = coroutine.create(function ()
for i=1,10 do
print("co", i)
coroutine.yield()
end
end)
运行如下,将在第一个 yield 处被挂起:
coroutine.resume(co) --> co 1
print(coroutine.status(co)) --> suspended
从协同的观点看:使用函数 yield 可以使程序挂起,当激活被挂起的程序时,
yield返回并继续程序的执行直到再次遇到 yield 或者程序结束
coroutine.resume(co) --> co 2
coroutine.resume(co) --> co 3
...
coroutine.resume(co) --> co 10
coroutine.resume(co) -- prints nothing