2011-04-12 55 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