Project1
标题: 求教Proc和Thread [打印本页]
作者: heiwang1997 时间: 2014-3-22 21:53
标题: 求教Proc和Thread
本帖最后由 heiwang1997 于 2014-3-22 21:55 编辑
XP默认脚本中,解释器3中有这样的代码:
$game_temp.message_proc = Proc.new { @message_waiting = false }
$game_temp.message_proc = Proc.new { @message_waiting = false }
求大神指教这是什么意思!
另外,RGSS高版本中还提供了Thread类,允许处理多进程,和这个Proc有什么区别?其critical属性是指什么?
还有还有,在程序中这样写对吗,会造成内存浪费什么的吗?
class Scene_XXX
def main
# 创建一个线程
@thre ad = Thread.new{loop do;Graphics.update;Input.update;end}
# 渐变
Graphics.transition
loop do
# 无限循环
break if false
end
Graphics.freeze
# 杀死进程,释放内存
@thread.kill
end
end
class Scene_XXX
def main
# 创建一个线程
@thre ad = Thread.new{loop do;Graphics.update;Input.update;end}
# 渐变
Graphics.transition
loop do
# 无限循环
break if false
end
Graphics.freeze
# 杀死进程,释放内存
@thread.kill
end
end
现在我想要创建一个代码块,包含loop do循环,想和主进程并行,但并不立即执行,是应该用proc再call呢,还是用thread先stop需要使用时在run或是wakeup呢?
菜鸟求教!
另外,虽然问题很多,但是关于一个冷门话题不想多发这么多贴,所以版主见谅哈~扣分手下留情
作者: heiwang1997 时间: 2014-3-29 16:47
本帖最后由 heiwang1997 于 2014-3-30 14:04 编辑
@hys111111 @天地有正气 跪求版主帮我移到RM技术去吧,这里好像没有人对这个问题感兴趣~
谢谢谢谢!
作者: 铅笔描绘的思念 时间: 2014-4-12 16:43
本帖最后由 恋′挂机 于 2014-4-13 13:48 编辑
Proc的话 就是拿来存储代码供稍后调用。。
官方文档 是ruby1.9.3之后支持- a = Proc.new { puts "Hello World!" }
- a.call# => "Hello World!"
复制代码 看出输出的信息其实就相当于执行一次尖括号内的语句
而Thread咱就不懂了。。
然后求版主帮代码框一下。。
作者: 寒冷魔王 时间: 2014-11-8 23:05
本帖最后由 寒冷魔王 于 2014-11-8 23:11 编辑
铅笔描绘的思念 发表于 2014-4-12 16:43
Proc的话 就是拿来存储代码供稍后调用。。
官方文档 是ruby1.9.3之后支持看出输出的信息其实就相当于执行 ...
Proc.new{&block}
Thread.new{&block}
貌似{&block}里的被传递过来都成为Proc呢?def pp(&block)
return block
end
p pp{p "Hello"}
def pp(&block)
return block
end
p pp{p "Hello"}
Thread是线程,可以并行运行程序,很有用的。(话说我也是最近才学的)
另外def pp(&block)
instance_eval &block
end
def pp(&block)
block.call
end
def pp(&block)
instance_eval &block
end
def pp(&block)
block.call
end
两个貌似是一样的?
作者: 寒冷魔王 时间: 2014-11-9 08:48
@taroxd 找到了……
如果没有使用instance_eval,如下面的代码,ruby就会抛出一个NoMethodError,因为source、owner、mode无法在block中被访问到。
class TemplateDSL
def initialize(path, &block)
@path = path
block.call
end
end
class TemplateDSL
def initialize(path, &block)
@path = path
block.call
end
end
当然也可以使用yeild传递变量的方式实现,但没有instance_eval简洁和灵活。
作者: chd114 时间: 2014-11-9 12:19
寒冷魔王 发表于 2014-11-8 06:05
Proc.new{&block}
Thread.new{&block}
貌似{&block}里的被传递过来都成为Proc呢?def pp(&block)
半年前的贴都被你们挖出来了···
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |