Lua之协成

xiaoxiao2025-08-22  78

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:最后一行显示报错信息,因为协程挂了,所以不能再执行

转载请注明原文地址: https://www.6miu.com/read-5035110.html

最新回复(0)