ssb 发表于 2010-4-27 18:12:25

lua coroutine 一问

以下内容均出自" 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)“函数也没办法使协同运行,这个协同肯定是能再次启动的,这种情况是为什么,怎么办?请高手帮忙!

sauron 发表于 2010-4-27 18:59:27

有现成的wait.lua不用啊,干嘛要深究这些事情。

qunshan 发表于 2010-4-27 19:04:02

只有suspend才能变成running吧,dead就结束了

wxm 发表于 2010-4-27 19:04:52

天花乱坠的看不懂。。。。

ssb 发表于 2010-4-27 19:05:36

这算是基本用法吧,,,
不会用可咋写程序呢

zzyb 发表于 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 ())

myu 发表于 2010-5-13 11:59:12

任何进程或线程,或者是这里说的协程,都是有生命周期的。你的协程已经执行完了,结束了生命周期,怎么还能resume呢?即使你再运行这段代码,虽然干的同样的话,但实际已是另一个线程了。进程线程是有生命周期的,它不等于一段静态的代码。
页: [1]
查看完整版本: lua coroutine 一问