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

相关推荐
武藤一雄几秒前
深入理解 C# 中的 sizeof 与非托管类型约束
开发语言·windows·c#·.net·.netcore
好家伙VCC几秒前
**发散创新:用 Rust实现数据编织(DataWrangling)的高效流式处理架构**在现
java·开发语言·python·架构·rust
2401_876907525 分钟前
《Python深度学习》
开发语言·python·深度学习
qwehjk20086 分钟前
分布式计算C++库
开发语言·c++·算法
222you6 分钟前
线程池的三个方法,七个参数,四个拒绝策略
java·开发语言
m0_716765236 分钟前
C++提高编程--仿函数、常用遍历算法(for_each、transform)详解
java·开发语言·c++·经验分享·算法·青少年编程·visual studio
枫叶丹48 分钟前
【HarmonyOS 6.0】ArkData 应用间配置共享:构建跨应用协作新范式
开发语言·华为·harmonyos
寻寻觅觅☆12 分钟前
东华OJ-基础题-59-倒数数列(C++)
开发语言·c++·算法
我不是懒洋洋13 分钟前
【数据结构】顺序表专题(详细代码及配图)
c语言·开发语言·数据结构·算法·青少年编程·visual studio
listhi52019 分钟前
基于在线优化的快速模型预测控制(Fast Online MPC)MATLAB实现
开发语言·matlab