-- lua中的coroutine提供了合作式的多线程支持,也就是说,它实际上不是在cpu上原生的多线程,
--when coroutine.resume excute this coroutine function
--...
-- coroutine.yield在内部函数中也可以切出
local resumePara1, resumePara2 = coroutine.yield(resumeReturn1, resumeReturn2)
-- use resumePara1, resumePara2 or not continue
-- 运行到自身终止
return value;
end
local co = coroutine.create(CoFunc)
-- local coWrapFunc = coroutine.wrap(CoFunc) 这个情况下coroutine.resume不返回excuteRes和errorMsg其它一样
local true, CoFuncReturn1, CoFuncReturn2 = coroutine.resume(co,para1Value, para2Value)
-- 或者 local false, errorMsg = cfcoroutine.resume(co,para1Value, para2Value)
-- 或者 local true, yieldPara1, yieldPara2 = cfcoroutine.resume(co, para1Value, para2Value)
-- 只是一个线程中可以保存多个执行环境.依赖于resume与yield进行执行环境的切换.
-- 详见:http://manual.luaer.cn/2.11.html
协程中的几个函数:coroutine.create/coroutine.wrap,coroutine.resume,coroutine.yield的理解代码,仔细研究下必有收获:
--when coroutine.resume excute this coroutine function
--...
-- coroutine.yield在内部函数中也可以切出
local resumePara1, resumePara2 = coroutine.yield(resumeReturn1, resumeReturn2)
-- use resumePara1, resumePara2 or not continue
-- 运行到自身终止
return value;
end
local co = coroutine.create(CoFunc)
-- local coWrapFunc = coroutine.wrap(CoFunc) 这个情况下coroutine.resume不返回excuteRes和errorMsg其它一样
local true, CoFuncReturn1, CoFuncReturn2 = coroutine.resume(co,para1Value, para2Value)
-- 或者 local false, errorMsg = cfcoroutine.resume(co,para1Value, para2Value)
-- 或者 local true, yieldPara1, yieldPara2 = cfcoroutine.resume(co, para1Value, para2Value)