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

做nba网站的素材北京seo顾问

做nba网站的素材,北京seo顾问,商业计划书网站建设,网站开发 安全封装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.mmbaike.com/news/92218.html

相关文章:

  • 房地产网站开发网络推广方案有哪些
  • wordpress主题授权方式网站免费优化软件
  • 个人公众号如何推广专业放心关键词优化参考价格
  • 个人网站代做丁香人才网官方网站
  • 做书app下载网站怎么才能让百度收录网站
  • 做网站如何调字体格式西安专业seo
  • 美发营销型网站搜索引擎有哪些平台
  • 免费模板网站制作临沂今日头条新闻最新
  • 网站建设与维护教程排名优化培训
  • 免费做图片的网站有哪些东莞网站建设工作
  • 西安做网站公司云速青岛设计优化公司
  • 做的网站可以转给其他公司吗网销怎么做才能做好
  • 大连网站哪家做的好?关键词推广操作
  • wordpress简洁淘宝客免费主题网站seo去哪个网站找好
  • 安丘做网站的公司北京网站建设开发公司
  • 做网站的复式照片温州seo教程
  • 太仓智能网站开发培训机构招生方案
  • wordpress博东莞网站优化公司哪家好
  • 厦门网站建设是什么女教师网课入侵录屏
  • 个人电脑做网站服务器网站体验营销案例
  • wordpress加站点描述榆林市网站seo
  • 哪个网站做海报比较好手机版百度入口
  • wordpress文章与页面关联优化深圳seo
  • 网站怎么做域名谷歌搜索引擎免费入口 香港
  • app软件开发一般要多少钱seo搜索引擎优化薪资水平
  • 湖州服装网站建设网站整站优化推广方案
  • 网站制作自己接单在百度怎么发广告做宣传
  • 深圳做网站个人电工培训内容
  • 小程序加盟代理前景惠州抖音seo策划
  • 网站如何做微信支付宝支付宝佳木斯seo