北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 4502|回复: 6

lua coroutine 一问

[复制链接]
发表于 2010-4-27 18:12:25 | 显示全部楼层 |阅读模式
以下内容均出自" pil 9.1 协同的基础":

"当我们创建协同程序成功时,其为挂起态,即此时协同程序并未运行。“
co = coroutine.create(function ()
    for i=1,10 do
       print("co", i)
       coroutine.yield()
    end
end)

"函数coroutine.resume使协同程序由挂起状态变为运行态:执行这个协同程序,程序将在第一个yield处被挂起:"coroutine.resume(co)            --> co   1
print(coroutine.status(co))     --> suspended

coroutine.resume(co)     --> co   2
coroutine.resume(co)     --> co   3
...
coroutine.resume(co)     --> co   10
coroutine.resume(co)     -- prints nothing

print(coroutine.resume(co))
        --> false   cannot resume dead coroutine


问:执行到”print(coroutine.resume(co))“
协同状态为”dead",后面再用”coroutine.resume(co)“函数也没办法使协同运行,这个协同肯定是能再次启动的,这种情况是为什么,怎么办?请高手帮忙!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-4-27 18:59:27 | 显示全部楼层
有现成的wait.lua不用啊,干嘛要深究这些事情。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-4-27 19:04:02 | 显示全部楼层
只有suspend才能变成running吧,dead就结束了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-4-27 19:04:52 | 显示全部楼层
天花乱坠的看不懂。。。。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2010-4-27 19:05:36 | 显示全部楼层
这算是基本用法吧,,,
不会用可咋写程序呢
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-5-11 02:31:26 | 显示全部楼层
协同状态为”dead",后面再用”coroutine.resume(co)“函数也没办法使协同运行,这个协同肯定是能再次启动的,这种情况是为什么,怎么办?请高手帮忙!


you should be able to create a new coroutine with the same callback function:

co = coroutine.create(function ())
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2010-5-13 11:59:12 | 显示全部楼层
任何进程或线程,或者是这里说的协程,都是有生命周期的。你的协程已经执行完了,结束了生命周期,怎么还能resume呢?即使你再运行这段代码,虽然干的同样的话,但实际已是另一个线程了。进程线程是有生命周期的,它不等于一段静态的代码。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-25 05:23 AM , Processed in 0.008958 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表