Определение максимального времени выполнения процесса - PullRequest
3 голосов
/ 12 апреля 2011

Мне нужно, чтобы процесс не работал дольше, чем n секунд, поэтому я решил сделать следующее:

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

Я подумал, что это правильный путь, но время от времени он терпит неудачу, расшифровка просто продолжает печатать Xes. Что меня беспокоит, так это то, что иногда это работает, и я не могу понять, что такое шаблон работа / неудача.

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

Это уже есть в библиотеке, вам не нужно его заново изобретать.

[10000 timesRepeat: [Transcript show: 'X']] 
    valueWithin: 1 second onTimeout: [Transcript show: 'stop']
4 голосов
/ 12 апреля 2011

Оба процесса работают с одинаковым приоритетом, поэтому у второго процесса вообще нет шансов прервать первый.Попробуйте запустить первый цикл с более низким приоритетом или даже лучше, второй с более высоким:

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