设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4612|回复: 4
打印 上一主题 下一主题

[已经解决] 纤程的使用方法

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
跳转到指定楼层
1
发表于 2012-1-30 17:43:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了http://rpg.blue/thread-220654-1-1.html 还是看不懂啊

可否举个例子:
初始化a=0  b=100

纤程1 : a+=1
纤程2 : b-=1

当 a == b 的时候
返回结果:  约50

Lv2.观梦者

梦石
1
星屑
255
在线时间
0 小时
注册时间
2012-1-30
帖子
3
2
发表于 2012-1-30 17:55:21 | 只看该作者
本帖最后由 答案 于 2012-1-30 18:07 编辑

不,并不会这样……
当我们调用fiber.resume,就告知fiber:“你可以开始运行了”,我们就把控制权交给了fiber。

当调用纤程的时候即把控制权交由纤程。纤程从上至下执行一遍,若没有Fiber.yield的时候,会执行到结尾,然后将控制权交还。如果按照你这个例子的话那么最后 a 是不会等于 b 的,当然如果加上循环的确就是50了,这和直接写语句效果是一样的
如下代码的确可以将a,b变成50
  1. a = 0
  2. b = 100
  3. while(a != b)
  4.   Fiber.new{a+=1}.resume
  5.   Fiber.new{b-=1}.resume
  6. end
  7. msgbox "#{a},#{b}"
复制代码
但是这样并不可以:
  1. a = 0
  2. b = 100
  3. Fiber.new{a+=1}.resume
  4. Fiber.new{b-=1}.resume
  5. msgbox "#{a},#{b}"
复制代码
咱个人认为把纤程作为一种扩展的闭包就好了……纯粹个人意见
纤程和线程是不一样的:
  1. a = 0
  2. b = 100
  3. Thread.new{a += 1 while true}
  4. Thread.new{b -= 1 while true}
  5. p a,b while true
复制代码
如果问题解决了请认可 答案
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
3
 楼主| 发表于 2012-1-30 18:07:21 | 只看该作者
答案 发表于 2012-1-30 17:55
不,并不会这样……

当调用纤程的时候即把控制权交由纤程。纤程从上至下执行一遍,若没有Fiber.yield的时 ...


循环 a+=1 的时候
调用 b-=1 纤程 返回b 的值
在判断

这和循环差不多啊?


我要用来做寻路 需要2边都开始查找 碰上就返回路径= =
(1边开始查找的话 对面是死路就会循环整个地图...)
回复

使用道具 举报

Lv2.观梦者

梦石
1
星屑
255
在线时间
0 小时
注册时间
2012-1-30
帖子
3
4
发表于 2012-1-30 18:13:12 | 只看该作者
wbsy8241 发表于 2012-1-30 18:07

循环 a+=1 的时候
调用 b-=1 纤程 返回b 的值

这种寻路方式大丈夫么= =
参考多线程DP的话就是左边搜索一步,右边搜索一步,如果用线程的话很难控制两边的搜索速度保持一样什么的……
纤程的话大概就是一个纤程作为起点寻路的运算过程,另一个作为终点,然后两个各resume一下,比较当前搜索的坐标……
寻路的话还是踏踏实实好好学图论比较好

点评

那我还是老老实实左边一步 右边一步好了 我这种寻路方式萌大奶的 A*  发表于 2012-1-30 18:56
如果问题解决了请认可 答案
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5407
在线时间
2559 小时
注册时间
2011-9-27
帖子
1119

极短23参与开拓者

5
发表于 2012-1-30 18:25:15 | 只看该作者
本帖最后由 怕鼠的猫 于 2012-1-30 18:31 编辑

我还是不写了吧。越来越复杂了。

点评

这货和循环一样......  发表于 2012-1-30 18:31

评分

参与人数 1星屑 +90 收起 理由
wbsy8241 + 90 塞糖

查看全部评分

从平淡走向更平淡。
回复

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-18 10:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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