Lua coroutine(协同程序)

本文深入探讨了 Lua 中的协同程序(coroutine)概念,包括其工作原理、创建与管理、如何进行协程间的切换以及在实际编程中的应用案例。通过学习,读者将能够熟练掌握 Lua 协同程序的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

定义和启动

**

--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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值