A new version of Sake-Scheduler was added to project Sake : http://www.squeaksource.com/Sake/Sake-Scheduler-kph.11.mcz
==================== Summary ====================
Name: Sake-Scheduler-kph.11 Author: kph Time: 2 July 2009, 3:16:58 pm UUID: a5e68e08-8304-4a11-ab65-19a515e352db Ancestors: Sake-Scheduler-kph.10
Fixed Scheduler Tests
+ minor api change doOnce:at: -> do:onceAt: + Fixes for new higher clock resolution
=============== Diff against Sake-Scheduler-kph.10 ===============
Item was changed: ----- Method: Scheduler>>do:every: (in category 'scheduling') ----- do: aBlock every: aDuration
+ ^ self addTask: (ScheduledTask do: aBlock every: aDuration)! - self addTask: (ScheduledTask do: aBlock every: aDuration)!
Item was changed: ----- Method: Scheduler>>do:at: (in category 'scheduling') ----- do: aBlock at: when
+ ^ self addTask: (ScheduledTask do: aBlock at: when)! - self addTask: (ScheduledTask do: aBlock at: when)!
Item was changed: ----- Method: ScheduledTask class>>unload (in category 'as yet unclassified') ----- unload
+ self stop! - self scheduler removeTasksOfClass: self!
Item was changed: ----- Method: Scheduler>>do:following: (in category 'scheduling') ----- do: aBlock following: aSchedule
+ ^ self addTask: (ScheduledTask do: aBlock following: aSchedule)! - self addTask: (ScheduledTask do: aBlock following: aSchedule)!
Item was changed: ----- Method: SchedulerTest>>testRunOnceInPastRunsOnce (in category 'as yet unclassified') ----- testRunOnceInPastRunsOnce
| message | + scheduler do: [message := 'task ran'] onceAt: (DateAndTime now - 1 second). - scheduler doOnce: [message _ 'task ran'] at: (DateAndTime now - 1 second). 1 second asDelay wait. self should: [message = 'task ran']. self should: [scheduler taskCount = 0]!
Item was changed: ----- Method: SchedulerTest>>testNewTaskScheduledToRunEarlierInDayGetsRescheduledLaterInDay (in category 'as yet unclassified') ----- testNewTaskScheduledToRunEarlierInDayGetsRescheduledLaterInDay
| message when task |
when _ (DateAndTime now - 1 minute) asTime. task _ scheduler do: [message _ 'task ran'] at: when. 1.1 seconds asDelay wait.
self should: [message isNil]. self should: [scheduler taskCount = 1]. + self should: [task nextRunTime asSeconds = + (DateAndTime date: (Date today addDays: 1) time: when) asSeconds]! - self should: [task nextRunTime = (DateAndTime date: (Date today addDays: 1) time: when)]!
Item was changed: ----- Method: Scheduler>>do:onceAt: (in category 'scheduling') ----- do: aBlock onceAt: when + ^ self addTask: (ScheduledTask do: aBlock onceAt: when )! - self addTask: (ScheduledTask do: aBlock onceAt: when )!
Item was changed: ----- Method: SchedulerTest>>testRunOnlyOnceWithOnlyTimeSpecified (in category 'as yet unclassified') ----- testRunOnlyOnceWithOnlyTimeSpecified
| runCount | runCount _ 0. + scheduler do: [runCount _ runCount + 1] onceAt: ((DateAndTime now + 1 seconds) asTime). - scheduler doOnce: [runCount _ runCount + 1] at: ((DateAndTime now + 1 seconds) asTime). 1.1 seconds asDelay wait. self should: [runCount = 1]. self should: [scheduler taskCount = 0]!
Item was changed: ----- Method: SchedulerTest>>testRunOnlyOnceWithFullyQualifiedDateAndTime (in category 'as yet unclassified') ----- testRunOnlyOnceWithFullyQualifiedDateAndTime
| runCount | runCount _ 0. + scheduler do: [runCount := runCount + 1] onceAt: (DateAndTime now + 1 seconds). - scheduler doOnce: [runCount _ runCount + 1] at: (DateAndTime now + 1 seconds). 1.1 seconds asDelay wait. self should: [runCount = 1]. self should: [scheduler taskCount = 0]!
Item was added: + ----- Method: ScheduledTask class>>do:onceAt: (in category 'as yet unclassified') ----- + do: aBlock onceAt: when + + ^ self do: aBlock at: when every: Duration zero!
Item was added: + ----- Method: ScheduledTask class>>stop (in category 'as yet unclassified') ----- + stop + + self scheduler removeTasksOfClass: self!
Item was changed: Object subclass: #ScheduledTask instanceVariableNames: 'description scheduler task runHistory workerProcess schedule nextRunTime' classVariableNames: '' poolDictionaries: '' category: 'Sake-Scheduler'! + + !ScheduledTask commentStamp: 'kph 3/28/2009 17:04' prior: 0! + If your task is to be run automatically on load or startUp, override #initialize (class side). + Otherwise name the method #start. + #stop/#unload are synomonous. + !
Item was changed: ----- Method: SchedulerTest>>testRunDailyTask (in category 'as yet unclassified') ----- testRunDailyTask
| message when task |
+ when := (DateAndTime now + 1 second) asTime. - when _ (DateAndTime now + 1 second) asTime. + task := scheduler do: [message := 'task ran'] at: when. - task _ scheduler do: [message _ 'task ran'] at: when. 1.1 seconds asDelay wait.
self should: [message = 'task ran']. self should: [scheduler taskCount = 1]. + self should: [task nextRunTime asSeconds = + (DateAndTime date: (Date today addDays: 1) time: when) asSeconds + ]! - self should: [task nextRunTime = (DateAndTime date: (Date today addDays: 1) time: when)]!
Item was changed: ----- Method: SchedulerTest>>testRunInASecond (in category 'as yet unclassified') ----- testRunInASecond
| ranWhen now | now _ DateAndTime now. scheduler do: [ranWhen _ DateAndTime now] at: (now + 1 seconds). 1.1 seconds asDelay wait.
+ self should: [ranWhen asSeconds = (now asSeconds + 1)]! - self should: [ranWhen = (now + 1 seconds)]!
Item was changed: ----- Method: Scheduler>>do:at:every: (in category 'scheduling') ----- do: aBlock at: when every: aDuration
+ ^ self addTask: (ScheduledTask do: aBlock at: when every: aDuration)! - self addTask: (ScheduledTask do: aBlock at: when every: aDuration)!
Item was removed: - ----- Method: ScheduledTask class>>doOnce:at: (in category 'as yet unclassified') ----- - doOnce: aBlock at: when - - ^ self do: aBlock at: when every: Duration zero!
packages@lists.squeakfoundation.org