2011-04-12 60 views
3

我需要从运行时间超过n秒停止一个进程,所以这里就是我想我会做的事:定义最大运行时间为一个进程

|aProcess| 
aProcess := [ 10000 timesRepeat: [Transcript show: 'X'] ] fork. 
[(Delay forSeconds: 1) wait. aProcess terminate] fork. 

我认为这是前进的正确方法,但它似乎不时失败,成绩单只是印刷Xes。让我感到困惑的是,它有时会起作用,我无法弄清楚工作/失败模式是什么。

+0

哪个版本的Pharo是这个?平台/ VM? – alienhard 2011-04-12 11:12:22

+0

它是CogVM上的Pharo – 2011-04-12 12:08:01

回答

4

这已经是在图书馆,你并不需要彻底改造它。

[10000 timesRepeat: [Transcript show: 'X']] 
    valueWithin: 1 second onTimeout: [Transcript show: 'stop'] 
+0

谢谢拉蒙,我不知道这件事。 – 2011-04-18 07:39:12

4

两个进程都以相同的优先级运行,这就是为什么第二个进程实际上根本没有机会中断第一个进程的原因。尝试在高运行第一循环在较低的优先级,甚至更好,第二个:

[(Delay forSeconds: 1) wait. aProcess terminate] 
     forkAt: Processor userInterruptPriority 
+0

非常感谢,它现在可以工作:) – 2011-04-12 12:12:05