【Lua】coroutine

1.create

创建协同程序 ,参数是函数(一般都是匿名函数),返回值是thread类型

co = coroutine.create(function () 

    print("hi")

end) 

print(co)     --> thread: 0x8071d98


2.status 

print(coroutine.status(co))     --> suspended

status 协同有三个状态:挂起态(suspended)、运行态(running)、停止态(dead)。刚创建时是挂起态


3.resume

函数coroutine.resume使协同程序由挂起状态变为运行态:

coroutine.resume(co)           --> hi

运行介绍后状态变成dead


4.yield

它可以将正在运行的代码挂起,看一个例子:

co = coroutine.create(function ()

    for i=1,10do

       print("co", i)

       coroutine.yield()

    end

end)



5.Lua中协同的强大能力,还在于通过resume-yield来交换数据。

<1>只有resume,没有yield,resume把参数传递给协同的主程序。

co = coroutine.create(function (a,b,c)

    print("co", a,b,c)

end)

coroutine.resume(co, 1, 2, 3)      --> co  1  2  3

<2>,数据由yield传给resume。true表明调用成功,true之后的部分,即是yield的参数。

-->yield的参数resume的返回值

co = coroutine.create(function (a,b)  

    coroutine.yield(a + b, a - b)

end)

print(coroutine.resume(co, 20, 10))    --> true  30  10


相应地,resume的参数,会被传递给yield。

-->resume的参数变成yield的返回值

co = coroutine.create (function ()

    print("co", coroutine.yield())

end)

coroutine.resume(co)

coroutine.resume(co, 4, 5)      --> co  4  5


<3>协同代码结束时的返回值,也会传给resume:

co = coroutine.create(function ()

    return 6, 7

end)

print(coroutine.resume(co))     --> true  6  7






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值