Lua在主线程之外还可以运行一个协同程序。可以通过coroutine的create方法创建一个协同程序,会在yield方法的地方暂停,然后调用resume方法时继续执行。
coroutine的方法:
create(f) 创建一个协程,f为协程内执行的方法。返回协程的句柄。
resume(co,[var1,...]) 执行协程方法,[]里是方法的参数。返回协程是否在运行,以及自定义的返回值。
running() 返回正在运行的协程句柄,在主线程调用返回nil。
status(co) 返回协程的状态,输入为协程句柄。
返回值:
"running"(运行中)
"suspended"(暂停)
"normal"(活动但未启用)
“dead”(死的)
wrap(f) 创建一个协程,但是返回的不是协程的句柄,而是调用协程方法的方法。
yield(...) 暂停协程,传递的参数为额外的返回值。
co= coroutine.create(
function (x,y)
local temp=10;
print("function",coroutine.status( co ));
print("coroutine section",x,y,temp);
local tempvar1=coroutine.yield( x+1,y+1 );
print("coroutine section2",x,y,temp);
print(coroutine.status(co))
end
)
print(coroutine.status(co));
print("main" ,coroutine.resume( co,3,2));
print(coroutine.status( co ));
print("main",coroutine.resume(co ,12,14 ));
wrap:
local func = function()
coroutine.yield(1)
coroutine.yield(2)
coroutine.yield(3)
coroutine.yield(4)
coroutine.yield(5)
end
local fun = coroutine.wrap (func)
for i = 1, 10 do
print(fun())
end
1:第六行显示的是空,因为func方法里实际上执行了六次,第六次的返回值为nil。
2:最后一行显示报错信息,因为协程挂了,所以不能再执行
|
请发表评论