我们如何使用 pharo 的 every:do: 方法?

How do we use every: do: method of pharo?

我查看了 pharo 书,但没有看到 every:aDuration do:aBlock 的任何示例。我发现了一个 Timespan class 当 运行 确实在创建对象和调用方法时给出错误。

|plan|
plan := Timespan new.
plan start.
" save the file every 30s"
plan
   every:30 seconds do:[ Transcript show:'My message']

|span aDate|

aDate := DateAndTime year: 2012 month: 12 day: 12.
span := Timespan starting: aDate duration: 1 minute.
span every: 10 seconds do: [ :each | Transcript show: each; cr ].

输出:

2012-12-12T00:00:00+00:00
2012-12-12T00:00:10+00:00
2012-12-12T00:00:20+00:00
2012-12-12T00:00:30+00:00
2012-12-12T00:00:40+00:00
2012-12-12T00:00:50+00:00

Timespan 的 every:do:不安排活动。您可以尝试分叉一个具有延迟的后台进程来执行此操作。

目前手边只有Squeak,不过应该差不多吧

像这样:

planProcess := [
                 [ 30 seconds asDelay wait.
                   Transcript show: 'Saved (but not really)'; cr.
                 ] repeat.
               ] fork.

要结束进程:

planProcess terminate.

您还可以使用一个调度程序。