版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asdfghj253/article/details/80742288
要点:协同函数
1.创建协同函数
--定义协同函数
co=coroutine.create(
function (a,b) --匿名函数 无需也无法定义方法名
print(a+b)
end
)
coroutine.resume(co,20,30) --启动协同函数
1.定义协同函数coroutine.create
2.启动协同函数coroutine.resume
2.定义协同函数,不同的是启动方式不同
co=coroutine.wrap(
function (a,b)
print(a+b)
end
)
co(20,30)
3.暂停和继续协同函数
--暂停、继续协程
co=coroutine.create(
function (a,b)
print(a+b)
coroutine.yield() --可以使此函数暂停
print(a-b)
end
)
coroutine.resume(co,20,30)
print("OK!");
coroutine.resume(co) --如要执行暂停后面的内容,可再执行协程,第二次启动可以不写参数
4.获取协同函数的执行状态
co=coroutine.create(
function (a,b)
print(a+b)
print(coroutine.running()) --输出running状态的协程 返回此协程线程的编号
print(coroutine.status(co)) --获取协程的运行状态 此时状态是running
print(a-b)
coroutine.yield(a+b); --暂停时也可传递出参数
return a*b,a/b;
end
)
print(coroutine.running()) --输出running状态的协程
print(coroutine.status(co)) --获取协程的运行状态 此时状态是 suspended 暂停状态 因为有暂停函数
res1,res2,res3=coroutine.resume(co,20,30) --协同函数的返回的第一个 永远是true/false
--第二个开始 才是我们写的返回值
print(res1,res2,res3); --执行到暂停函数 所以输出 true 50 nil
res1,res2,res3=coroutine.resume(co)
print(res1,res2,res3); --执行到 再后面的内容 所以输出 true 600 0.66666666666667
print(coroutine.status(co)) --获取协程的运行状态 此时状态是 dead