在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一 LUA 协程函数 1 resume local status, returnvs = coroutine.resume(co, params) co 为 所要启动的协程。 第一次调用resume时,参数是协程函数入口的参数,协程函数调用coroutine.yield之后交出控制权 后面继续调用resume恢复该协程时, 参数是作为上次调用coroutine.yield处的返回值 status表明此次调用co是否有运行,co的状态。 若resume返回时co未结束,returnvs为coroutine.yield传递的参数。 如果返回时co已经结束,returnvs为co的return的返回值
2 yield co(params) local ins = coroutine.yield(returnvs) end
returnvs 作为本次调用co的 coroutine.resume的返回值。 ins为下次coroutine.resume重新调用co时输入的参数params。
二 例子 function consumer(arg) local v = 0 print("consumer arg ", arg) //第一次调用coroutine.resume后开始执行consumer,参数通过coroutine.resume传入 while true do recv = coroutine.yield(v*2) //第一次执行到这句开始暂停,等待再次调用coroutine.resume,再次调用coroutine.resume后,recv值就是 //coroutine.resume传入的参数,yield的参数就是给coroutine.resume返回的值 if recv == 0 then break end v = recv print("consumer, recv-> ", recv) end end
function produce() co = coroutine.create(consumer) local status, returnvs = coroutine.resume(co, "hello func agr") i = 1 repeat status, returnvs = coroutine.resume(co, i) print("produce, ret-> ", returnvs, "\n") i = i + 1 until( i > 10 ) status, returnvs = coroutine.resume(co, 0) print(status, returnvs) end
produce()
三 总结 1 yield的参数就是resume的返回值,resume的参数就是yield的返回值,参数可以是多个参数 2 第一次调用resume时的参数是协程函数入口的参数 3 第一次碰到yield语句之后协程停止执行,直到调用resume唤醒 |
请发表评论