定义进程的最长运行时间

时间:2011-04-12 08:33:34

标签: smalltalk pharo

我需要阻止一个进程运行超过n秒,所以这就是我认为我会做的事情:

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

我认为这是正确的进行方式,但似乎有时会失败,Transcript只会继续打印Xes。让我感到困惑的是它有时会起作用,我无法弄清楚工作/失败模式是什么。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

这已经在库中了,你不需要重新发明它。

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