当前位置: 首页 > 工具软件 > 协同放置 > 使用案例 >

第九章 协同程序(coroutine)

穆招
2023-12-01

基础

1.lua将所有关于协同程序的函数放置在一个名为“coroutine”的table中。

2.常用接口:

--常用接口
--[[
1.创建一个协同程序,只有一个参数,参数为一个函数
补充:当创建一个协同程序时,它处于挂起状态,也就是说,协同程序不会在创建它时自动执行其内容
后面会讲检查协同程序状态的接口
2.检查协同程序的状态,参数为协同程序
coroutine.status(co)
3.协同程序的挂起,只有协同程序的主函数才能调用类似于yield这样的函数。
coroutine.yield()
4.协同程序的唤醒
coroutine.resume(co)
--]]
local co = coroutine.create(function()
    print("hi")
end)
print(coroutine.status(co))   -->suspended
print(co) -->thread: 000000001EC4EF00
coroutine.resume(co)  --> hi
print(coroutine.status(co))   -->dead

------------------------------------------------------------------------

3.。前面的简单的例子,看上去还只是一种复杂的函数调用方法,其实协同程序的强大之处在于函数yield的使用上,该函数可以让一个运行中的协同程序挂起,而之后可以再恢复它的运行。

--[[
协同程序创建
--]]
local co = coroutine.create(function()
    for i = 1, 10 do
        print("co", i)
        coroutine.yield()
    end
end)
for i = 1, 11 do
    coroutine.resume(co)     -->1到10会打印,第11次什么都不打印
end
--[[
在最后一次调用resume时,协同程序的内容已经执行完毕,并已经返回
--]]

4.lua的协同程序还具有一项有用的机制

管道(pipe)与过滤器(filter)

 

 类似资料: