Lua协程coroutine库用法

一.学习Lua协程的目的

1.可以更好的学习和掌握一些Lua框架比如ToLua,因为这些框架可能使用Lua协程

2.Lua协程是Lua语言的一部分,虽然不常用,掌握后可以在遇到某些需求时可以想到用Lua协程可以解决问题。

二.Lua协程概念

和Unity协程的概念类似,Lua协程是可以让函数暂停,在暂停处继续执行方法的机制。

三.协程API

3.1 coroutine.create(func)

接收一个function参数,返回一个thread类型变量(下文称协程对象)

Lua 复制代码
    local co = coroutine.create(function ()
        print("co execute")
    end)
    print(co)

3.2 coroutine.status(co)

接收一个协程对象,返回协程状态。一个协程有suspended, running, and dead三种状态。通过coroutine.create创建的协程,其初始状态为suspended,意味着其函数体不会自动执行,下面例子展示了协程的三种状态

Lua 复制代码
    co = coroutine.create(function ()
        print("co execute")
        print("co 函数体内status:",coroutine.status(co))
    end)
    print("co create后status:",coroutine.status(co))
    coroutine.resume(co)
    print("co resume后status:",coroutine.status(co))

3.3 coroutine.resume(co)

coroutine.resume方法恢复一个协程的执行,使其状态从suspended变为running

3.4 coroutine.yield()

挂起一个协程,使其状态变为suspended

Lua 复制代码
   co = coroutine.create(function ()
        print("co execute before yield")
        coroutine.yield()
        print("co execute after yield")
    end)

    coroutine.resume(co)
    function funcResume()
        print("funcResume called")
        coroutine.resume(co)
    end
cs 复制代码
        if (GUI.Button(new Rect(50, 50, 120, 45), "DoFile"))
        {
            //strLog = "";
            LuaFunction luaFunc = lua.GetFunction("funcResume");
            if (luaFunc != null)
            {
                luaFunc.BeginPCall();
                luaFunc.PCall();
                luaFunc.EndPCall();
            }
        }

参考:

Coroutine Basics

相关推荐
执于代码10 分钟前
python 环境知多少
开发语言·python
t***54425 分钟前
如何在 Dev-C++ 中切换编译器至 Clang
开发语言·c++
威迪斯特32 分钟前
GoFr框架:加速微服务开发的Go语言利器
开发语言·后端·微服务·架构·golang·命令行框架·gofr框架
斯维赤36 分钟前
Python学习超简单第十一弹:邮件发送
开发语言·python·学习
CoderCodingNo37 分钟前
【信奥业余科普】C++ 的奇妙之旅 | 14:程序的分叉路口——逻辑判断与 if-else 语句
开发语言·c++
The Chosen One9851 小时前
a进制转b进制的转换总结
开发语言·c++
ECT-OS-JiuHuaShan1 小时前
哲学的本质,是递归因果
java·开发语言·人工智能·科技·算法·机器学习·数学建模
overmind1 小时前
oeasy Python 124 序列_字符串_string_str
开发语言·python
一个假的前端男1 小时前
Flutter 实现 BLE 设备 WiFi 配网流程实践
开发语言·flutter
片酷1 小时前
【Isaacsim&Isaaclab】安装教程
linux·开发语言·python