TimerScheduler extend [ TimerScheduler class >> initialize [ "Pharo requires us to do some post-processing" Smalltalk addToStartUpList: self. Smalltalk addToShutDownList: self. ^self instance. ] TimerScheduler class >> startUp [ Smalltalk at: #OsmoTimeScheduler ifPresent: [:timer | timer doStartUp]. ] TimerScheduler class >> shutDown: quitting [ Smalltalk at: #OsmoTimeScheduler ifPresent: [:timer | timer doShutDown]. ] doShutDown [ loop ifNil: [^self]. quit := true. sem critical: [ loopSem ifNotNil: [loopSem signal]]. delay ifNotNil: [:the_delay | the_delay signalWaitingProcess]. processExited wait. Transcript nextPutAll: 'Stopped the TimerScheduler process'; cr ] doStartUp [ loop ifNotNil: [^self error: 'The loop should have vanished']. Transcript nextPutAll: 'Starting the TimerScheduler loop again'; cr. quit := false. self startLoop. ] signalDelay [ "Called with sem critical being consumed" delay ifNotNil: [delay signalWaitingProcess]. ] scheduleInSeconds: aNumber block: aBlock [ ^self scheduleIn: aNumber seconds block: aBlock ] ] Dispatcher class extend [ initialize [ self instance ] ]