立即终止进程

时间:2012-10-17 09:18:02

标签: smalltalk pharo

请考虑以下代码:

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"

正如您所看到的,在对块进行评估之前(即在这种情况下十秒之后),该过程不会终止。

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

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

1 个答案:

答案 0 :(得分:1)

发送terminate后,您的流程暂停(通过发送isSuspended检查),以便除非恢复,否则不会运行。您从isTerminated收到错误,因为该进程尚无法启动(请查看isTerminated的源代码以了解原因)。

所以实际上你的进程是不活跃的,一旦你放弃引用就会被垃圾收集,这对你来说应该和“终止”一样好。

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