• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

LUA协程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一  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唤醒


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap