搜索
查看: 10490|回复: 5

fiber.resume 传入参数问题[已解决]

  [复制链接]

117

主题

1237

帖子

6592

积分

六级会员

Rank: 9Rank: 9Rank: 9

积分
6592
发表于 2011-8-3 18:52:52 | 显示全部楼层 |阅读模式
本帖最后由 落伍者 于 2011-8-3 19:48 编辑

//纤程简单示例
io.open()

func =
function(n){
   
for(i=1;n;1){
        io.print(
"我正在循环",i+"/"+n)
        fiber.yield (123)
//休眼,并将控制权与参数返回给调用者
    }   
}

var task = fiber.create(func)

//运行纤程
var ret = fiber.resume (task,12)//范例中第一次传人参数 n=12
ret = fiber.resume (task,120) //我要改变 参数n的值
ret = fiber.resume (task)//实质上 不传入参数 依然记录的是第一次的值 12
ret = fiber.resume (task,12)

execute("pause") //按任意键继续
io.close();//关闭控制台


// ---请问
// ---此种情况 怎么改变n的值呢?

我是菜鸟...
回复

使用道具 举报

117

主题

1237

帖子

6592

积分

六级会员

Rank: 9Rank: 9Rank: 9

积分
6592
 楼主| 发表于 2011-8-3 19:48:30 | 显示全部楼层

终于又在逐字逐句看了一遍的情况下会了 fiber.resume() 与 fiber.yield () 是可以来回传递数据的,一个的参数就是另一个的返回值,

终于又在逐字逐句看了一遍的情况下会了

fiber.resume() 与 fiber.yield () 是可以来回传递数据的,一个的参数就是另一个的返回值,就如传接力棒.

这个是老大是 纤程简介的时候 跟贴
我是菜鸟...
回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2011-8-28 14:36:43 | 显示全部楼层

[color=#666666][backcolor=rgb(249, 249, 249)]io.open() func = [color=#0000ff]

io.open()

func = function(n){
   
for(i=1;n;1){
        io.print(
"我正在循环",i)
        io.print(
"返回协程:",fiber.yield (i)) //休眠,并将控制权与参数返回给调用者
    }   
}

var task = fiber.create(func)

//运行纤程
io.print("跳出协程:",fiber.resume (task,4))//4是传入启动函数func的参数n
io.print("跳出协程:",fiber.resume (task,2))//2是传入fiber.yield的参数
io.print("跳出协程:",fiber.resume (task,5))

execute("pause") //按任意键继续
io.close();//




这个示例会让你更明白的,感谢chentca

回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2011-8-28 14:46:43 | 显示全部楼层

[i=s] 本帖最后由 qqmmcc 于 2011-8-28 14:51 编辑 [/i] 再来一个 也许更明白[quote]io.open() func

本帖最后由 qqmmcc 于 2011-8-28 14:51 编辑

再来一个 也许更明白
io.open()

func = function(n){
   
for(i=1;n;1){
        io.print(
"我正在循环",i)
        io.print(
"返回协程:",fiber.yield (6)) //休眠,此函数传入参数将会作为fiber.resume()的返回值,下次调用
    }   
}

var task = fiber.create(func)

//运行纤程
io.print("跳出协程:",fiber.resume (task,4))//4是传入启动函数func的参数n
io.print("跳出协程:",fiber.resume (task,2))//2是传入fiber.yield的调用
io.print("跳出协程:",fiber.resume (task,5))

execute("pause") //按任意键继续
io.close();//关闭控制台

2011-08-28 14 46 38.png



fiber.create(__/*函数对象*/) = 创建纤程\n调用fiber.resume()函数启动纤程。
fiber.resume (__/*纤程*/,) = 继续运行纤程\n成功返回true以及fiber.yield()传入的参数\n错误返回false以及错误信息.
fiber.yield (__/*一个或多个返回值*/) = 暂停纤程,\n此函数传入参数将会作为fiber.resume()的返回值。\下次调用fiber.resume()的参数即为本次调用的返回值。



回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2011-8-29 19:11:37 | 显示全部楼层

一个的参数就是另一个的返回值,就如传接力棒 他的参数是我的返回值,我拿这个返回值做什么?这个接力棒,不知道有什么作用? 始终未理解

一个的参数就是另一个的返回值,就如传接力棒

他的参数是我的返回值,我拿这个返回值做什么?这个接力棒,不知道有什么作用? 始终未理解
回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
发表于 2011-8-29 20:41:52 | 显示全部楼层

看前面以为你明白了,再一看后面,你是更糊涂了。 即然你不需要返回值,当然就可以不要,返回值是有一天你需要的时候,突然想起来,他居然可以如你所愿给你一个返回

看前面以为你明白了,再一看后面,你是更糊涂了。

即然你不需要返回值,当然就可以不要,返回值是有一天你需要的时候,突然想起来,他居然可以如你所愿给你一个返回值,没有产生需求的时候想他的作用没有意义。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-24 11:52 , Processed in 0.078125 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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