Lua学习笔记(7)----协程

本文深入讲解Lua中的协程概念,包括协程的创建、状态、挂起与恢复,以及resume和yield函数的配合使用,展示如何通过协程实现更高效的程序控制流程。

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

学习传送门:https://www.runoob.com/lua/lua-coroutine.html

协程(coroutine)

任一指定时刻只有一个协程在运行,并且这个协程只有在明确被要求挂起的时候才会被挂起。

     

function func1(a)
   print("a-->",a)
end
co1=coroutine.create(func1)
print("before--->",coroutine.status(co1))  //before---> suspended
//resume()只要调用就会返回一个bool值和协程方法返回的值
state,value=coroutine.resume(co1,2)
print("state-->"..state.."--value-->"..value)  //state--> true  --value--> 2
print("after--->",coroutine.status(co1))   //after---> dead

print("-------------先走协程,在走字符串输出--------------------------")
co2=coroutine.wrap(func1)
print("wrap--->",co2(10))     //10 "warp--->"

print("-------------如果协程遇到yield会被挂起------------------------")
function func3()
	for i=1,10,1 do
		print("i--->",i)
		coroutine.yield()
	end
end
co3=coroutine.create(func3)
coroutine.resume(co3)
print("co3--->",coroutine.status(co3))   //i---> 1  第一轮循环后被挂起
print("running--->",coroutine.running)   //返回当前在跑的协程方法序号

注:当使用resume触发事件的时候,create的coroutine函数就被执行了,当遇到yield的时候就代表挂起当前线程,等候再次resume触发事件,resume和yield的配合强大之处在于,resume处于主程中,它将外部状态(数据)传入到协同程序内部;而yield则将内部的状态(数据)返回到主程中。 

                                                                                                                                                                   2020/07/06  南投北浪

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值