• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua之协成

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Lua在主线程之外还可以运行一个协同程序。可以通过coroutine的create方法创建一个协同程序,会在yield方法的地方暂停,然后调用resume方法时继续执行。

 

 

coroutine的方法:

create(f)    创建一个协程,f为协程内执行的方法。返回协程的句柄。
resume(co,[var1,...])    执行协程方法,[]里是方法的参数。返回协程是否在运行,以及自定义的返回值。
running()    返回正在运行的协程句柄,在主线程调用返回nil。
status(co)    返回协程的状态,输入为协程句柄。
返回值:
"running"(运行中)
"suspended"(暂停)
"normal"(活动但未启用)
“dead”(死的)
wrap(f)    创建一个协程,但是返回的不是协程的句柄,而是调用协程方法的方法。
yield(...)    暂停协程,传递的参数为额外的返回值。
 

co= coroutine.create(
		function (x,y)
			local temp=10;
			print("function",coroutine.status( co ));
			print("coroutine section",x,y,temp);
			local tempvar1=coroutine.yield( x+1,y+1 );
			print("coroutine section2",x,y,temp);
			print(coroutine.status(co))
		end
	)
	
	print(coroutine.status(co));
	print("main" ,coroutine.resume( co,3,2));
	print(coroutine.status( co ));
	print("main",coroutine.resume(co ,12,14 ));

    

wrap:

local func = function() 
		coroutine.yield(1) 
		coroutine.yield(2)
		coroutine.yield(3)
		coroutine.yield(4)
		coroutine.yield(5)
	end

	local fun = coroutine.wrap (func)

	for i = 1, 10 do
		print(fun())
	end

1:第六行显示的是空,因为func方法里实际上执行了六次,第六次的返回值为nil。

2:最后一行显示报错信息,因为协程挂了,所以不能再执行


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua实战笔记第3篇 Qt调用lua动态链接库发布时间:2022-07-22
下一篇:
记录一次nginx+lua发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap