1 Star 1 Fork 0

蒙海康/Lua-5.1.1

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mainTest.lua 1.88 KB
一键复制 编辑 原始数据 按行查看 历史
蒙海康 提交于 2024-06-18 18:35 . edit
local function errMsgFunc(errMsg)
print("Error=" .. errMsg)
end
local function genNewCo(coRunFunc)
local function coFunc(...)
-- first run, ... get from first resume
local retTbl = {pcall(coRunFunc, ...)}
if not retTbl[1] then
errMsgFunc(retTbl[2])
end
-- Recycling
while true do
-- yield return to co_resume, and expect new coRunFunc
coRunFunc = coroutine.yield(unpack(retTbl))
-- yield accept new actual parameters
retTbl = {pcall(coRunFunc, coroutine.yield())}
if not retTbl[1] then
errMsgFunc(retTbl[2])
end
end
end
local co = coroutine.create(coFunc)
return co
end
local coPool = setmetatable({}, { __mode = "kv" })
local function co_create(coRunFunc)
local co = table.remove(coPool)
if not co then
print("--------- gen new one ---------")
return genNewCo(coRunFunc)
else
print("--------- repeat use ---------")
coroutine.resume(co, coRunFunc)
return co
end
end
local function co_resume(co, ...)
-- run real func
local retTbl = {coroutine.resume(co, ...)}
-- reback to pool
table.insert(coPool, co)
-- retTbl[1] must be true, lose it
return unpack(retTbl, 2)
end
------------------------------ test ------------------------------
local function test()
print("test func running")
assert(false)
return 1, 2, 3
end
local co = co_create(test)
local a, b, c = co_resume(co)
print("1 run =", a, b, c)
co = co_create(test)
a, b, c = co_resume(co)
print("2 run =", a, b, c)
local function test2(num1, num2)
local total = num1 + num2
print("add result = " .. total)
return total
end
co = co_create(test2)
a, b, c = co_resume(co, 11, 44)
print("3 run =", a, b, c)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/menghaikang/Lua-5.1.1.git
[email protected]:menghaikang/Lua-5.1.1.git
menghaikang
Lua-5.1.1
Lua-5.1.1
main

搜索帮助