乐趣区

关于lua:我们一起来学lua协程coroutine-二

大家好,骚气十足的额,又来了,对,明天咱们次要来学习下 lua 协程的用法, 小伙伴们筹备好小板凳,筹备开车了~~~(ps:如同有点偏题了,不过不重要你们当作没看见就行(O ^ ~ ^ O))

协程次要函数:
函数名 入参 返回值 形容
coroutine.create() 承受单个参数,这个参数是 coroutine 的主函数 返回它的控制器,(一个对象为 thread)的对象 创立 coroutine,返回 coroutine,参数是一个函数,当和 resume 配合应用的时候就唤醒函数调用
coroutine.resume() 第一个参数:coroutine.create 的返回值,即一个 thread 对象。第二个参数:coroutine 中执行须要的参数,是一个变长参数,可传任意多个参数。 如果程序没有任何运行谬误的话,那么会返回 true,之后的返回值是前一个调用 coroutine.yleld 中传入的参数。如果有任何谬误的话,就会返回 false,加上错误信息 重启 coroutine(重启时不必再传参数),和 create 配合应用
coroutine.yield() 传入变长参数,这些参数会作为返回值被 coroutine.resume 接管 返回在前一个调用 coroutine.resume()中传入的参数值 挂起 coroutine,将 coroutine 设置为挂起状态,这个和 resume 配合应用能有很多有用的成果(返回参数)
coroutine.running() 返回以后正在运行的协程。如果它被主线程调用的话,会返回 nil 返回正在跑的 coroutine,一个 coroutine 就是一个线程,当应用 running 的时候,就是返回一个 corouting 的线程号如果没有返回 nil
coroutine.status() 返回以后协程的状态:有 running,suspended,normal,dead 返回正在跑的 coroutine,一个 coroutine 就是一个线程,当应用 running 的时候,就是返回一个 corouting 的线程号如果没有返回 nil

创立协程实例:

-- 创立一个协程

co = coroutine.create(function (str)

 print(str);

 end

)

print("以后协程状态:"..coroutine.status(co))

运行后果:

以后协程状态:suspended

创立协程的函数是 coroutine.create,调用这个函数胜利之后就会返回一个协程对象,后续咱们无关协程的操作就围绕这个对象进行。下面的例子 co 就是咱们协程对象。通过 coroutine.status 这个函数查看协程状态,咱们能够发现以后的状态是 suspended 挂起状态,也就是说 coroutine.create 只实现创立协程的动作,然而协程当初并没有跑起来,不然这时候的状态就应该是 running 了。
为了让协程跑起来,这时候就轮到 coroutine.resume 这个函数大展拳脚了。咱们再来看下上面这 hello world 例子。(ps:人人都爱 hello world 不要厌弃博主举的例子很 low 啊≧◠◡◠≦✌)

hello world 例子:

-- 创立一个协程, 但还没有调用

co = coroutine.create(function (str)

 print(str);

 end

)

-- 开启协程,打印 hello world!coroutine.resume(co,"hello world!")

通过 hello world 这个例子咱们就能够分明的看到协程失常运行起来了,这时候协程的状态是 runnning 嘛?有趣味的童鞋能够打印进去看看,想想看为什么是这个状态。有时候我感觉,学习编程,最重要的还是大家可能多入手,多思考。不然就算我博客写得再具体,大家可能把握的货色还是很无限的。just do it~~~ 话不多说,干就是了!

lua 中文手册
参考文章一
参考文章二

退出移动版