Lua协程的使用

Lua由于其语言设计的原因,并不支持多线程。但是我们可以使用协程的api来进行线程的切换,从而达到多线程的目的。

我们常用的api有:
coroutine.create() 创建一个协程
coroutine.resume() 使协程继续运行
coroutine.yield() 将协程挂起

我们使用以下这个例子来说明协程的运作模式

local function play(a)
  print(a)
  local ret = coroutine.yield(666)
  print('play 1',ret)
  local ret =coroutine.yield(999)
  print('play 2',ret)
end
local co = coroutine.create(play)
local ret , t= coroutine.resume(co,123)
print('co 1',ret,t)
local ret , t= coroutine.resume(co,321)
print('co 2',ret, t)
local ret , t= coroutine.resume(co,666)
print('co 3',ret, t)

从下面的打印可以看到函数play不断的被运行以及挂起

123
co 1	true	666
play 1	321
co 2	true	999
play 2	666
co 3	true	777

最终使用协程的api就可以实现类似多线程的操作了。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页