**
**
--Lua里面的协同程序(coroutine)
--暂定函数,可以挂起,可以一步一步的执行,可以暂停
--第一种定义,启动
--1、定义协同程序(coroutine.create)
co=coroutine.create(
function (a,b)
print(a+b)
end
)
--2、启动协程(coroutine.resume)
coroutine.resume(co,10,20)
--第二种定义,启动
--1、定义协同程序(coroutine.wrap)
co=coroutine.wrap(
function (a,b)
print(a+b)
end
)
--2、启动协程(coroutine.resume)
co()
coroutine.yield()–挂起函数 coroutine.resume(co)-- 继续执行协程 | |
---|
| |
--1、定义协程coroutine.create
--2、启动协程coroutine.resume()可以传递参数
--3、暂定协程coroutine.yield
--4、继续运行协程coroutine.resume (不需要传递参数可以)
co=coroutine.create(
function (a,b)
print(a+b)
coroutine.yield()--挂起函数
print(a-b)
end
)
coroutine.resume(co,10,20)
print("call over")
coroutine.resume(co)-- 继续执行协程
--执行了print(a-b)
co=coroutine.create(
function (a,b)
print(a+b)
coroutine.yield('暂定时候的返回值放在这里')--挂起函数
print(a-b)
return "coroutine over",400,'最后的返回值'
end
)
res,res1=coroutine.resume(co,10,20)
print(res)--第一个返回值(都是bool值,代表是否成功启动了协同程序)
print(res1)--第二个返回值
print("call over")
res2,res3,res4=coroutine.resume(co)-- 继续执行协程
print(res2)--第一个返回值
print(res3)--第二个返回值
print(res4)--第三个返回值
coroutine.status(co) 查看协程的运行状态(dead之后,协程没法重写启动运行了) | |
---|
| |
co=coroutine.create(
function (a,b)
print(a+b)
print('1:'..coroutine.status(co))--结果为running 的时候,只有在协程内部
coroutine.yield('暂定时候的返回值放在这里')--挂起函数
print('2:'..coroutine.status(co))
print(a-b)
print('3:'..coroutine.status(co))
end
)
print('4:'..coroutine.status(co)) --结果suspended(暂停的,还未启动的),启动之前
res,res1=coroutine.resume(co,10,20)
print('5:'..coroutine.status(co))--结果suspended,还是暂停的,暂停的时候
res2,res3,res4=coroutine.resume(co)-- 继续执行协程
print('6:'..coroutine.status(co))
输出结果:
4:suspended
30
1:running
5:suspended
2:running
-10
3:running
6:dead