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

Project1

 找回密码
 注册会员
搜索
查看: 1206|回复: 5

[已经解决] 求教Proc和Thread

[复制链接]

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
465 小时
注册时间
2011-4-13
帖子
174
发表于 2014-3-22 21:53:57 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 heiwang1997 于 2014-3-22 21:55 编辑

XP默认脚本中,解释器3中有这样的代码:
RUBY 代码复制打印
  1. $game_temp.message_proc = Proc.new { @message_waiting = false }

求大神指教这是什么意思!

另外,RGSS高版本中还提供了Thread类,允许处理多进程,和这个Proc有什么区别?其critical属性是指什么?
还有还有,在程序中这样写对吗,会造成内存浪费什么的吗?
RUBY 代码复制打印
  1. class Scene_XXX
  2.   def main
  3.     # 创建一个线程
  4.     @thre ad = Thread.new{loop do;Graphics.update;Input.update;end}
  5.     # 渐变
  6.     Graphics.transition
  7.     loop do
  8.       # 无限循环
  9.       break if false
  10.     end
  11.     Graphics.freeze
  12.     # 杀死进程,释放内存
  13.     @thread.kill
  14.   end
  15. end


现在我想要创建一个代码块,包含loop do循环,想和主进程并行,但并不立即执行,是应该用proc再call呢,还是用thread先stop需要使用时在run或是wakeup呢?

菜鸟求教!
另外,虽然问题很多,但是关于一个冷门话题不想多发这么多贴,所以版主见谅哈~扣分手下留情  

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
465 小时
注册时间
2011-4-13
帖子
174
 楼主| 发表于 2014-3-29 16:47:47 | 显示全部楼层
本帖最后由 heiwang1997 于 2014-3-30 14:04 编辑

@hys111111  @天地有正气 跪求版主帮我移到RM技术去吧,这里好像没有人对这个问题感兴趣~
谢谢谢谢!  
回复 支持 反对

使用道具 举报

[动态]猫侍发起了挑战,但是被击败了。 (打开TA的战斗卡片)

Lv2.观梦者

梦石
0
星屑
400
在线时间
953 小时
注册时间
2012-4-30
帖子
1477

开拓者

发表于 2014-4-12 16:43:11 | 显示全部楼层
本帖最后由 恋′挂机 于 2014-4-13 13:48 编辑

Proc的话 就是拿来存储代码供稍后调用。。
官方文档  是ruby1.9.3之后支持
  1. a = Proc.new { puts "Hello World!" }
  2. a.call# => "Hello World!"
复制代码
看出输出的信息其实就相当于执行一次尖括号内的语句

而Thread咱就不懂了。。
然后求版主帮代码框一下。。

点评

http://www.kuqin.com/rubycndocument/man/built-in-class/class_object_thread.html中文ruby手册上的线程类可以自己看得话看这个不错。。爪机无力研究  发表于 2014-4-12 16:44
夏活或许弃坑
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv2.观梦者

梦石
0
星屑
881
在线时间
1381 小时
注册时间
2010-8-9
帖子
3470
发表于 2014-11-8 23:05:33 | 显示全部楼层
本帖最后由 寒冷魔王 于 2014-11-8 23:11 编辑
铅笔描绘的思念 发表于 2014-4-12 16:43
Proc的话 就是拿来存储代码供稍后调用。。
官方文档  是ruby1.9.3之后支持看出输出的信息其实就相当于执行 ...

Proc.new{&block}
Thread.new{&block}
貌似{&block}里的被传递过来都成为Proc呢?
RUBY 代码复制打印
  1. def pp(&block)
  2.   return block
  3. end
  4. p pp{p "Hello"}
Thread是线程,可以并行运行程序,很有用的。(话说我也是最近才学的)
另外
RUBY 代码复制打印
  1. def pp(&block)
  2.   instance_eval &block
  3. end
  4. def pp(&block)
  5.   block.call
  6. end

两个貌似是一样的?

点评

当然不一样……  发表于 2014-11-9 08:13
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv2.观梦者

梦石
0
星屑
881
在线时间
1381 小时
注册时间
2010-8-9
帖子
3470
发表于 2014-11-9 08:48:03 | 显示全部楼层
@taroxd   找到了……

如果没有使用instance_eval,如下面的代码,ruby就会抛出一个NoMethodError,因为source、owner、mode无法在block中被访问到。
RUBY 代码复制打印
  1. class TemplateDSL
  2.       def initialize(path, &block)
  3.         @path = path
  4.         block.call
  5.       end
  6.     end
当然也可以使用yeild传递变量的方式实现,但没有instance_eval简洁和灵活。

点评

谢了~  发表于 2014-11-9 09:02
http://rm.66rpg.com/thread-369676-1-1.html  发表于 2014-11-9 09:00

评分

参与人数 1星屑 +100 收起 理由
恐惧剑刃 + 100 塞糖

查看全部评分

SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

[动态]受到琳旖琳的挑战,被揍得晕头转向。 (打开TA的战斗卡片)

Lv4.逐梦者

梦石
0
星屑
7104
在线时间
2382 小时
注册时间
2011-5-20
帖子
15065

开拓者

发表于 2014-11-9 12:19:31 | 显示全部楼层
寒冷魔王 发表于 2014-11-8 06:05
Proc.new{&block}
Thread.new{&block}
貌似{&block}里的被传递过来都成为Proc呢?def pp(&block)

半年前的贴都被你们挖出来了···

点评

那就不知了···  发表于 2014-11-9 13:14
没有  发表于 2014-11-9 13:14
目测是之前被广告机挖出来的  发表于 2014-11-9 13:13
都在第一页……另外我想说为什么我2年前的帖子也在第一页?  发表于 2014-11-9 13:12
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2019-8-25 21:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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