lua协程

Lua中协同程序:意义和Unity中一样
Lua中协同程序的函数被放在coroutine的表中
协同程序状态:挂起、执行、死亡、正常
协程创建后默认为挂起状态

cor = coroutine.create( function() 
    print("111") 
end
)

print(coroutine.status( cor )) --查看协程状态
coroutine.resume(cor) --开始协程
print(coroutine.status( cor )) --查看协程状态

yield 挂起 需要手动启动

local cor = coroutine.create( function()
    for i=1,2 do
        print(i)
        coroutine.yield() --挂起
    end 
end)
coroutine.resume( cor )
print(coroutine.status( cor ))
coroutine.resume( cor )
print(coroutine.status( cor ))

resume 有两个返回值 第一个是协程是否正常执行,第二个是错误信息

local cor = coroutine.create( function()
    error("aaabbb")
end)
local r1,err1 = coroutine.resume( cor )
print(r1)
print(err1)

当程序正常执行时,第二个返回值也可以是yield的值

local cor = coroutine.create( function(a)
    print(a)
    coroutine.yield( 'Young' )
end)
local rr,ee = coroutine.resume( cor,10,20 )
print(rr)
print(ee)

协程传参

local cor = coroutine.create( function(a,b)
    print(a+b)
end)
coroutine.resume( cor,10,20 )

yield 函数也有返回值 ,返回值时resume的第二个参数

local cor = coroutine.create( function(a)
    print(a)
    local c = coroutine.yield( 'Young' )
    print(c)
end)
coroutine.resume( cor,10)
coroutine.resume( cor,"lalala")

yield函数的返回值为resume的第二个参数
resume的返回值为yield的参数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,743评论 0 38
  • 并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制。多任务机制大致可划分为两种: ...
    JunChow520阅读 7,891评论 0 4
  • “协程(coroutine)”于我而言还是比较新的概念,Lua 也是刚接触不久。不过碰巧这段时间我又在看 ES6 ...
    NARUTO_86阅读 5,627评论 0 3
  • 先看一段代码 运行结果at coAA -- 1at coBB -- 1at coBB -- 2at coCC --...
    不恭仙人阅读 4,505评论 0 50
  • 即使我死了,埋在土地里,我也要用我腐烂的声带喊出:闲置CPU是可耻。——孔子 进程,线程?并行,并发? 由于单核C...
    落单的毛毛虫阅读 9,170评论 1 3