lua协程

1.1 创建一个协程

--创建一个协程
cor_func = coroutine.create(
	function ()
		print("hello world");
	end
);

--查看一下coroutine.create的返回值
print(cor_func);
--[[
thread: 001EC560 返回一个线程实例
--]]



1.2 启动协程

cor_func = coroutine.create(
	function ()
		print("hello, world");
	end
);

--调用线程实例
coroutine.resume(cor_func);
--[[调用协程内的功能函数
执行结果:
hello, world
--]]



1.3 协程创建状态和执行后的状态

cor_func_a = coroutine.create(
	function ()
		print("func a");
	end
);

cor_func_b = coroutine.create(
	function ()
		print("func b");
	end
);

print(coroutine.status(cor_func_a));
print(coroutine.status(cor_func_b));

print(cor_func_a);

print(coroutine.status(cor_func_a));
print(coroutine.status(cor_func_b));


--[[
func a:suspended --创建一个线程,线程的状态是挂起
func b:suspended
func a
func a:dead		--调用resume之后线程状态为消亡
func b:suspended
--]]


1.4 yield

cor_func = coroutine.create(
	function (value_a, value_b)
		print(coroutine.status(cor_func));
		---第二次执行时候直接执行coroutine.yield();以下的代码
		 coroutine.yield();
		print("yyyy----->"..a, b);
		print("xxxx----->"..value_a, value_b);
	end
);

print("第一次调用");
coroutine.resume(cor_func,10,20);
print("第二次调用");
coroutine.resume(cor_func );

--[[
第一次调用协程碰到coroutine.yield();将线程挂起
第二次调用会有两种,
2.1不压入参数的情况:
coroutine.resume(cor_func);

cor_func = coroutine.create(
	function (value_a, value_b)
		print(coroutine.status(cor_func));
		coroutine.yield();
		print("xxxx----->"..value_a, value_b);
	end
);会直接执行coroutine.yield();以下的代码,将上次压入函数的参数进行输出

2.2压入参数的情况:
coroutine.resume(cor_func,1,2);
cor_func = coroutine.create(
	function (value_a, value_b)
		print(coroutine.status(cor_func));
		a,b =coroutine.yield(); --输出新压入的参数
		print("yyyy----->"..value_a, value_b);
		print("xxxx----->"..value_a, value_b);
	end
);再cor_func的时候压入参数,如果需要处理当前压入参数
需要协程中函数申请变量获取
a,b =coroutine.yield(); --》获取coroutine.resume(cor_func,1,2);传入的参数
--]]







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值