--协同程序:相当于同步的多线程,在等待同一个线程锁的几个线程有点类似协同。在任意指定时刻只有一个协同程序在运行,
--并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起
--coroutine.create()创建 coroutine,返回 coroutine, 参数是一个函数,当和 resume 配合使用的时候就唤醒函数调用
--coroutine.resume()重启 coroutine,和 create 配合使用
--coroutine.yield() 挂起 coroutine,将 coroutine 设置为挂起状态,这个和 resume 配合使用能有很多有用的效果
--coroutine.status()查看 coroutine 的状态:dead,suspended,running
--coroutine.wrap() 创建 coroutine,返回一个函数,一旦你调用这个函数,就进入 coroutine,和 create 功能重复
--coroutine.running()返回正在跑的 coroutine,一个 coroutine 就是一个线程,当使用running的时候,就是返回一个 corouting 的线程号
--第1种方式创建协同
c1= coroutine.create(
function(i)
print(i)
end
)
coroutine.resume(c1,1) --1
print(coroutine.status(c1)) -- dead
print()
--第2种方式创建协同
c2 = coroutine.wrap(
function(i)
print(i)
end
)
c2(1)
print()
--挂起
c3 = coroutine.create(
function()
for i=1,10 do
print(i)
if(i==3)
then
print(coroutine.status(c3)) --running
print(coroutine.running())--thread:XXX
end
coroutine.yield() --每循环一次,挂起协程
end
end
)
coroutine.resume(c3) --1
coroutine.resume(c3) --2
coroutine.resume(c3) --3
print(coroutine.status(c3)) -- suspended
print(coroutine.running())
lua-协同程序
最新推荐文章于 2022-02-20 01:03:03 发布