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

Lua语言学习-协同程序

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

菜鸟教程 https://www.runoob.com/lua/lua-coroutine.html

协程类似线程,但是在本人实际的游戏开发中并未使用,感觉使用协程会增加程序的复杂度

使用案例

wrap和create

------------- 协同程序
--[[
-- 两种方式
co = coroutine.wrap(
    function(a, b)
        print(a+b)
    end
)
co(20, 20)


co = coroutine.create(
    function(a, b)
        print(a+b)
        coroutine.yield()
        print(a-b)
    end
)

coroutine.resume(co, 20, 30)

print("I\'m here!")

coroutine.resume(co) -- 第一次执行需要传递参数,第一次未完成继续执行不需要重复传递参数(传递后不会生效)
--]]

-- 添加返回值
co = coroutine.create(
    function(a, b)
        print(a+b)
        coroutine.yield(a*b, a+b) -- 过程中返回值,yield括号内的内容
        return a-b,a+b  -- 结束时候返回值
    end
)

res1,res2,res3 = coroutine.resume(co, 10, 40) -- 第一个返回值永远是true或者false,代表协程是否执行成功
print(res1,res2,res3)
print("here")

res1,res2 = coroutine.resume(co)
print(res1,res2,res3)

--print(coroutine.running()) -- 协程运行时获取正在运行的协程

-- 协程的两种暂停方式
-- 一种是直接在方法里调用yield暂停
-- 另一只是在另一个方法里调用yeild,并将yield作为返回值暂停

 

协程的参数传递有点复杂,详见菜鸟教程和siki视频,建议是在创建协程时一次性传递所有参数,这样可以避免混乱


鲜花

握手

雷人

路过

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

请发表评论

全部评论

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

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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