关于lua:我们一起来学lua协程coroutine-三

8次阅读

共计 1352 个字符,预计需要花费 4 分钟才能阅读完成。

* 上一期咱们次要介绍了协程的相干函数,以及协程的创立。这一期,咱们次要来介绍协程怎么进行合作的,而合作也正是协程的精髓所在,小伙伴们,小板凳带好了嘛?≧◠◡◠≦✌*
生存当中咱们做事件常常都是不可能一干到底的。比方,你正在看书,这时候忽然来了个电话,或者说你在跟朋友家人视频聊天,这时候忽然没信号了了。在这种状况下,咱们都不得不停下原先手中的事件,去解决其余事件,等其余事件解决完了,再接着原先的事件往下走。为了解决这样的问题,协程也提供了合作机制。咱们先来看看上面的一个简略实例。
合作实例一:
-- 创立一个协程, 但还没有调用

read_co = coroutine.create(function ()

 print("看书")

 print("有电话打进来")

 coroutine.yield()

 print("电话打完了,持续看书")

 end

)

-- 开启读书协程

coroutine.resume(read_co)

print("打电话")

coroutine.resume(read_co)
运行后果:
 看书
有电话打进来
打电话
电话打完了,持续看书

实例通过 coroutine.yield() 挂起协程,而后又通过 coroutine.resume 切换回协程,持续往下执行。是不是很简略?接下来咱们来看下 coroutine.yield 跟 coroutine.resume 更深一步的做法,咱们还是间接看实例吧。

协程实例二:
-- 创立一个协程, 但还没有调用

read_co = coroutine.create(function ()

 print("看书")

 print("有电话打进来")

 local ret1, ret2 = coroutine.yield("我读到第三章了", "第二章很精彩")

 print("ret1 ="..ret1)

 print("ret2 ="..ret2)

 print("电话打完了,持续看书")

 end

)

-- 开启读书协程

local ret1, ret2, ret3 = coroutine.resume(read_co)

print(ret1)

print("ret2 ="..ret2)

print("ret3 ="..ret3)

print("打电话")

coroutine.resume(read_co,"王老师打来的电话","让我读第五章")

运行后果:

 看书
有电话打进来
true
ret2 = 我读到第三章了
ret3 = 第二章很精彩
打电话
ret1 = 王老师打来的电话
ret2 = 让我读第五章
电话打完了,持续看书

从这个实例咱们能够看到 coroutine.yield 的参数能够返回给前一个 coroutine.resume。这里须要留神的是 coroutine.resume 的第一个返回值是协程运行是否出错,通过打印咱们能够晓得这里要么等于 true 要么等于 false。从第二个返回值开始才是 coroutine.yield 传进去的值。协程应用 coroutine.yield 挂起之后,如何使它继续执行呢?还是要通过 coroutine.resume,这时候 coroutine.yield 的返回值也就是 coroutine.resume 的入参信息。这里童鞋们看明确了?
好了明天协程内容就介绍到这里,今天咱们持续深入探讨协程的合作问题,以及合作在异步通信的具体利用~~~

正文完
 0