zoukankan      html  css  js  c++  java
  • 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唤醒

  • 相关阅读:
    51nod贪心算法入门-----完美字符串
    HDU6030----矩阵快速幂
    O(n)求1~n的逆元
    (四)添加签到奖励功能
    (三)开始在OJ上添加签到功能
    (二)OJ的主要文件
    (一)在linux上ubuntu搭建hustOJ系统
    CF 148A Insomnia cure
    lower_bound和upper_bound
    C++ string的常用功能
  • 原文地址:https://www.cnblogs.com/sysnap/p/6910066.html
Copyright © 2011-2022 走看看