• LUA协程


    一  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, " ")

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

  • 相关阅读:
    算法第五章作业
    算法第四章作业
    算法第四章上机实践报告
    算法第三章作业——动态规划
    算法第三章上机实践报告
    分治法的思想与体会
    算法第二章上机实践报告
    c++代码规范及《数学之美》读后感
    bugkuctf web部分(前8题)解题报告
    第二次博客作业
  • 原文地址:https://www.cnblogs.com/sysnap/p/6910066.html
Copyright © 2020-2023  润新知