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);传入的参数
--]]