当前位置: 首页 > news >正文

自己电脑做网站访问速度百度网页制作网站建设

自己电脑做网站访问速度,百度网页制作网站建设,兰州网站开发公司,免费加盟无需店面封装go函数用于创建并启动一个协程: ---go函数创建并启动一个协程 ---param _co_task function 函数原型 fun(_co:thread) function go(_co_task)local co coroutine.create(_co_task) -- 创建一个暂停的协程coroutine.resume(co, co) -- 调用coroutine.resume激活…

封装go函数用于创建并启动一个协程:

---go函数创建并启动一个协程
---@param _co_task function @函数原型 fun(_co:thread)
function go(_co_task)local co = coroutine.create(_co_task) -- 创建一个暂停的协程coroutine.resume(co, co) -- 调用coroutine.resume激活协程执行
end

封装项目中的异步函数用于成为协程函数:

---封装c_model.c_foo异步函数,成为协程函数
---@param _co thread @协程对象
---@return boolean,string
function co_foo(_co)c_model.c_foo(function(_ok, _result)coroutine.resume(_co, _ok, _result) -- 2. 回调函数被调用后,激活本协程继续执行,并把_ok和_result传递给yieldend)return coroutine.yield() -- 1. 主动放弃运行,本协程被切换出去
end

使用例子:

---通过顺序编写代码解决回调函数造成同块逻辑被撕裂的例子
---@param _co thread @协程对象
function test(_co)for i = 1, 10, 1 dolocal ok, result = co_foo(_co) -- co_foo函数会先yield切出,等内部回调被执行时再通过resume重新切回来继续执行print(ok, result)end
end-- 启动test协程
go(test)

封装defer用于处理协程的正常和异常退出:

首先定义defer函数,让它具备能够多次被调用的能力:

function defer(_co_wrap, h)table.insert(_co_wrap.defer_handlers, h)
end

同时定义co_error对象用于判断是否有错误:

---@class co_error
---@field ok boolean

定义invoke_defer_handlers函数来执行defer操作:

function invoke_defer_handlers(_co_wrap, _co_error)for i=#_co_wrap.defer_handlers, 1, -1 dolocal h = _co_wrap.defer_handlers[i]xpcall(h, function(err) print(err) end, _co_error)end
end

定义coroutine_resume函数来处理协程的异常退出:

function coroutine_resume(_co_wrap, ...)local ok, errmsg = coroutine.resume(_co_wrap.co, ...)if not ok theninvoke_defer_handlers(_co_wrap, {ok=false}) -- 异常退出end
end

定义go函数来处理协程的正常退出:

function go(_co_task)local co = coroutine.create(function(_co_wrap)_co_task(_co_wrap)invoke_defer_handlers(_co_wrap, {ok=true}) -- 正常退出end)local cowrap = { co = co, defer_handlers = {} } ---@type co_wrapcoroutine_resume(cowrap, cowrap) -- 初创建的协程是暂停的,手动触发执行
end

通过以上封装,可以在Lua中以类似Golang的方式编写协程代码。

协程间的通信暂时不需要在多线程中实现,因为项目中目前只有一个lua_state对象管理。

http://www.sczhlp.com/news/133415/

相关文章:

  • 门户app网站建设多少钱个人网站制作协议
  • 便捷网站建设哪家好公司网站搜索引擎优化
  • 做株洲网站需要多少钱wordpress用户投稿插件
  • 民治网站优化培训wordpress怎么创建目录页面
  • 随机过程学习笔记
  • Easysearch 国产替代 Elasticsearch:8 大核心问题解读
  • 9.24 闲话
  • 中国建设银行官方网站诚聘英才频道乐清 做网站 多少钱
  • 网站建设方案解救苏州久远网络wordpress公开课插件
  • 网站建设企业战略经营性质的网站
  • 龙岩市住房和城乡建设厅网站首页网上购物软件排行榜
  • 网站页面设计模板长春网站优化策略
  • 网站开发的工资伊克昭盟seo
  • 网站域名需icp备案不错的网站开发公司
  • 济宁住房与建设网站如何建设电子商务网站
  • 济南网站设计公司排名电商小程序开发平台
  • AGC023F 题解
  • 个人介绍
  • 郑州网站制作汉狮遵义在线网站建设
  • 网站搜索排优化怎么做网上营销培训课程
  • wordpress订单邮件内容修改专业的网站优化公司
  • 网站悬浮微信二维码如何选择品牌网站建设
  • 安装wordpress出现数据表不可以长沙网站seo推广公司哪家好
  • 做物流网站的公司吗19寸 网站做多大
  • 电子商务网站有哪些和网址合肥网站关键词
  • 长沙做网站公司WordPress的jquery
  • 做外包网站的公司是怎样的业务网站制作
  • 网站建设安排做物流的用什么网站配货
  • C#学习2
  • AGC203F 题解