2

考虑以下代码:

process := [ (Delay forSeconds: 10) wait ] 
    forkAt: Processor userBackgroundPriority.
process terminate.
process isTerminated. "--> false"
process resume. "process has been suspended but not terminated"
(Delay forSeconds: 10) wait.
process isTerminated "--> true"

如您所见,该进程在块被评估之前不会终止(即在本例中为十秒后)。

有没有办法立即终止进程?另外:有没有人知道为什么首先评估该块?

编辑: 我可以看到为什么要评估该块。上面代码的问题当然是我尝试在进程激活之前终止它。不过,如果我不想等待延迟到期怎么办?

4

1 回答 1

1

发送后terminate,您的进程被暂停(通过发送检查isSuspended),因此除非恢复,否则它将不会运行。你得到错误是isTerminated因为该过程还没有机会开始(查看源代码isTerminated以了解原因)。

所以实际上你的进程是不活动的,一旦你放开引用就会被正确地收集垃圾,就你的目的而言,它应该和“终止”一样好。

(免责声明:我查看的是 Squeak 代码,而不是 Pharo,但系统的这一部分应该几乎相同)

于 2012-10-17T20:29:13.187 回答