Lua学习笔记(7)----协程

    技术2022-07-13  70

    学习传送门: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  南投北浪

     

    Processed: 0.020, SQL: 9