学习传送门:https://www.runoob.com/lua/lua-coroutine.html
协程(coroutine)
任一指定时刻只有一个协程在运行,并且这个协程只有在明确被要求挂起的时候才会被挂起。
function func1(a)
print("a-->",a)
end
co1=coroutine.create(func1)
print("before--->",coroutine.status(co1)) //before---> suspended
//resume()只要调用就会返回一个bool值和协程方法返回的值
state,value=coroutine.resume(co1,2)
print("state-->"..state.."--value-->"..value) //state--> true --value--> 2
print("after--->",coroutine.status(co1)) //after---> dead
print("-------------先走协程,在走字符串输出--------------------------")
co2=coroutine.wrap(func1)
print("wrap--->",co2(10)) //10 "warp--->"
print("-------------如果协程遇到yield会被挂起------------------------")
function func3()
for i=1,10,1 do
print("i--->",i)
coroutine.yield()
end
end
co3=coroutine.create(func3)
coroutine.resume(co3)
print("co3--->",coroutine.status(co3)) //i---> 1 第一轮循环后被挂起
print("running--->",coroutine.running) //返回当前在跑的协程方法序号
注:当使用resume触发事件的时候,create的coroutine函数就被执行了,当遇到yield的时候就代表挂起当前线程,等候再次resume触发事件,resume和yield的配合强大之处在于,resume处于主程中,它将外部状态(数据)传入到协同程序内部;而yield则将内部的状态(数据)返回到主程中。
2020/07/06 南投北浪