查看: 5092|回复: 4

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

[复制链接]
梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
回帖
550
发表于 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
梦石
1
星屑
255
在线时间
0 小时
注册时间
2012-1-30
回帖
3
发表于 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
复制代码
如果问题解决了请认可 答案 君
回复

使用道具 举报

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
回帖
550
 楼主| 发表于 2012-1-30 18:07:21 | 显示全部楼层
答案 发表于 2012-1-30 17:55
不,并不会这样……

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

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

这和循环差不多啊?


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

使用道具 举报

梦石
1
星屑
255
在线时间
0 小时
注册时间
2012-1-30
回帖
3
发表于 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
如果问题解决了请认可 答案 君
回复

使用道具 举报

梦石
0
星屑
5615
在线时间
2571 小时
注册时间
2011-9-27
回帖
1059

极短23参与开拓者

发表于 2012-1-30 18:25:15 | 显示全部楼层
本帖最后由 怕鼠的猫 于 2012-1-30 18:31 编辑

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

点评

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

评分

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

查看全部评分

从平淡走向更平淡。
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部