• Lua语言学习-协同程序


    菜鸟教程 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视频,建议是在创建协程时一次性传递所有参数,这样可以避免混乱

  • 相关阅读:
    kafka集群搭建
    数据导入 xls --》mysql
    Spark --RDD算子
    Spark集群搭建
    【已解决】 IDEA运行spark程序报错:GC overhead limit exceeded?
    Spring Boot 配置 ---02
    Spring Boot 入门 ---01
    Nginx 推流 拉流 --- 点播直播
    【转】JS内置对象方法
    MapReduce 简单数据统计
  • 原文地址:https://www.cnblogs.com/orxx/p/10839884.html
Copyright © 2020-2023  润新知