Project1

标题: rb_protect是必须的吗? [打印本页]

作者: yangff    时间: 2011-9-30 23:41
标题: rb_protect是必须的吗?
本帖最后由 yangff 于 2011-9-30 23:43 编辑

似乎rb_protect就直接把主线程抢走了开什么玩笑啊我是在WndProc里面调用啊(什么为什么要在WndProc里面调用这不是很显然嘛我是外挂的程序啊)
但是这样绝对不行啊……我Ruby是用来做解释器的怎么可以这样啊!!
要怎么弄呢?
不要多线程至少我的代码里面不要有多线程至于Ruby是怎么弄的我才不管呢……
作者: 苏小脉    时间: 2011-10-1 12:25
用 rb_protect 是为在顶层环境防止 Ruby 抛出异常后直接终止解释器主线程,如果你你传递给它的(第一个参数指向的)函数抛出异常,rb_protect 就会通过安全的方法告知调用者。如果 rb_protect 一直不返回,说明你传递给它的函数没返回。
作者: 尘羽泯    时间: 2011-10-1 12:46
rb_protect是啥表示我没用过。我只用过一个带“protect”的,“rb_eval_string_protect”。感觉没什么用,直接在这句上面加上try/catch也可以达到一样的效果。
作者: yangff    时间: 2011-10-2 10:21
苏小脉 发表于 2011-10-1 12:25
用 rb_protect 是为在顶层环境防止 Ruby 抛出异常后直接终止解释器主线程,如果你你传递给它的(第一个参数 ...

是这样的
我的程序用rb_require引用某个rb文件,这个rb进去是初始化环境的没有任何循环。
那么我用rb_protect会不会导致原线程无返回?
还有我用rb_require之后会在其他地方用rb_eval,rb_callfunc什么的没有执行rb_protect会不会有影响?
作者: 苏小脉    时间: 2011-10-2 10:52
yangff 发表于 2011-10-2 10:21
是这样的
我的程序用rb_require引用某个rb文件,这个rb进去是初始化环境的没有任何循环。
那么我用rb_pro ...

你先说说你传给 rb_protect 的函数是什么?

还有我用rb_require之后会在其他地方用rb_eval,rb_callfunc什么的没有执行rb_protect会不会有影响?

我在前一楼已说了 rb_protect 的作用,不知道是不是我语言没组织好。你只要能确定调用 rb_eval、rb_callfunc 后不会抛出 Ruby 异常,那可以不用 rb_protect。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1