2017-11-27 11 views
0

필자는 pharo 책을 보았고 모든 예제를 볼 수 없었다. aDuration do : aBlock. 런타임이 나올 때 객체가 생성되고 메서드가 호출 될 때 오류가 발생하는 Timespan 클래스를 발견했습니다. 어떻게 우리는 every : do : pharo의 방법을 사용합니까?

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

+3

테스트에 몇 가지 예가 있습니다. Pharo를 열고'TimespanDoTest' 클래스를 찾습니다. 또한'do ​​:'블록에 대한 인수를 제공해야합니다. –

+0

TimespanDoTest에는 매번 메소드가 없습니다 : do : – ludo

+0

'every : do '를 구현하는 클래스는'Timespan'입니다. 'TimespanDoTest' 클래스는'TimespanDoTest >> each : do :'를 테스트하기위한 메소드를 구현합니다. 'every : do :'를 포함하여'Timespan' 프로토콜을 사용하는 방법을 이해하기 위해 테스트를 살펴볼 수 있습니다. –

답변

3

시간 범위의 모든 : DO : 이벤트를 예약하지 않습니다. 지연을 사용하여 백그라운드 프로세스를 포크 화하여 시도 할 수 있습니다.

저는 지금 당황 스럽지만, 어느 정도 같아야합니다. 이 같은

뭔가 :

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

프로세스를 종료하려면 :

planProcess terminate. 

이 사용할 수있는 스케줄러도 있습니다.

+1

바로 그게 제가 찾고 있던 것입니다. 고마워요 @fede s – ludo

+2

@ludo, 아무런 prob! 나는 다른 답변에 대한 귀하의 의견으로 대부분 생각 했으므로, 다음 질문에 대해서는 여분의 명시 적으로 노력하십시오. (명백한 것은 다른 사람들에게는 없을 수도 있습니다.) BTW, 나는 이것을 "빠르고 더러운 것"이상으로 평가하지 않습니다. 당신을 시작하게하는 지점으로 생각하십시오. –

1
|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 
+0

나는 똑같은 일을하지만 10 초마다 반복하지는 않습니다. 어떻게 메시지를 표시 할 수 있습니까? – ludo

+1

@ludo - 'Timespan'은 10 초마다 * 반복하지 않습니다. 그것은 단지 2012-12-12T00 : 00 : 00 개까지 (2012 년 12 월 12 일부터 01:00까지) 2012 년 12 월 12 일부터 01 시까 지의 시간 범위 내에서 10 초 간격으로 해당 DateAndTime 개체를 만드는 것입니다. – draegtun

+1

@ludo는 '[5 times Repep : [5 초 asDelay wait]와 같은 것을 찾고있다. 대본보기 : '안녕!'; cr]] fork.' –