zoukankan      html  css  js  c++  java
  • LUA 协程

    LUA协程和C#协程非常相似,功能与用法更强大。基础用法:

    coco = coroutine.create(function (a,b)
        print("resume args:"..a..","..b)
        local arg1, arg2 = coroutine.yield(222, 333, 444) --第一次调用resume()时执行到此句就返回了,没有执行=赋值操作
        --第二次执行resume()操作时,从=号开始继续执行剩余代码,且此时新的调用参数(21,11111)从=号传出给了arg1, arg2
        --除了=号传参这一点外,其余都基本与c#协程相同,都是一种基于代码片段切分的执行
        print ("yield return :".. arg1 .."," .. arg2)
    end)
    print(coroutine.resume(coco,0,1))
    print(coroutine.resume(coco,21, 11111))
    --输出如下:
    --~ resume args:0,1
    --~ true    222    333    444
    --~ yield return :21,11111
    --~ true

    一个典型的例子:生产者-消费者模式

    count = 10
    productor = coroutine.create( 
      function () 
        i = 0 
        while(true) do 
          i = i+1 
          coroutine.yield(i) 
        end 
      end 
    ) 
    
    consumer = coroutine.create( 
    function(co) 
      n = 1 
      while(n<count) do 
      _, v = coroutine.resume(co) 
        print(v) 
        n = n+1 
      end 
    end 
    ) 
    
    coroutine.resume(consumer, productor)
  • 相关阅读:
    逆序对
    【模板】树状数组 1
    【模板】树状数组2
    发射站
    质量检测
    【模板】ST表
    winform ComBox绑定数据
    JavaScript CheckBox实现全选和部分选择
    webbrowser内容滚动(javascript内容无缝滚动)
    double? int?
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/6004344.html
Copyright © 2011-2022 走看看