3

プロセスが n 秒以上実行されないようにする必要があるため、次のようにします。

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

これが適切な進め方だと思いましたが、時々失敗するようで、Transcript は Xes を印刷し続けます。私を悩ませているのは、それが時々うまくいくことであり、仕事/失敗のパターンが何であるかを理解できません。

4

2 に答える 2

4

両方のプロセスが同じ優先度で実行されているため、2 番目のプロセスは実際には最初のプロセスをまったく中断する機会がありません。最初のループを低い優先度またはそれ以上の優先度で実行し、2 つ目のループを高い優先度で実行してみてください。

 [(Delay forSeconds: 1) wait. aProcess terminate] 
       forkAt: Processor userInterruptPriority
于 2011-04-12T11:33:33.413 に答える
4

これはすでにライブラリにあるため、再発明する必要はありません。

[10000 timesRepeat: [Transcript show: 'X']] 
    valueWithin: 1 second onTimeout: [Transcript show: 'stop']
于 2011-04-14T21:18:31.747 に答える