#BUGFIX
class: Delay
changed:
#delay:
#setDelayDuration:
#until:
#wait
take care for negative deltas
--- a/Delay.st Tue Dec 22 04:41:19 2015 +0000
+++ b/Delay.st Tue Dec 22 14:25:55 2015 +0100
@@ -11,6 +11,8 @@
"
"{ Package: 'stx:libbasic' }"
+"{ NameSpace: Smalltalk }"
+
Object subclass:#Delay
instanceVariableNames:'millisecondDelta resumptionTime delaySemaphore isInterrupted'
classVariableNames:''
@@ -174,11 +176,12 @@
"return a new Delay object, that will delay the active process
until the system has reached the time represented by the argument."
- |numberOfMilliseconds|
+ ^ self new delay:(aTimeStamp millisecondDeltaFrom:Timestamp now)
- "/ numberOfMilliseconds := aTimeStamp getMilliseconds - Timestamp now getMilliseconds.
- numberOfMilliseconds := aTimeStamp millisecondDeltaFrom:Timestamp now.
- ^ self new delay:numberOfMilliseconds
+ "
+ (self until:(Timestamp now + 1 seconds)) wait
+ (self until:(Timestamp now - 30 seconds)) wait
+ "
!
untilMilliseconds:aMillisecondTime
@@ -252,7 +255,12 @@
"set the millisecond delta and create a new semaphore internally to wait upon"
self assert:(numberOfMillis notNil).
- millisecondDelta := numberOfMillis.
+ numberOfMillis < 0 ifTrue:[
+ millisecondDelta := 0.
+ ] ifFalse:[
+ millisecondDelta := numberOfMillis.
+ ].
+
delaySemaphore := Semaphore new name:'delaySema'.
"Modified: / 22-12-2010 / 14:18:00 / cg"
@@ -277,7 +285,11 @@
"set the millisecond delta"
self assert:(numberOfMillis notNil).
- millisecondDelta := numberOfMillis.
+ numberOfMillis < 0 ifTrue:[
+ millisecondDelta := 0.
+ ] ifFalse:[
+ millisecondDelta := numberOfMillis.
+ ].
resumptionTime := nil.
!
@@ -300,8 +312,11 @@
isInterrupted := false.
millisecondDelta notNil ifTrue:[
+ currentDelta := millisecondDelta rounded.
+ currentDelta <= 0 ifTrue:[
+ ^ self.
+ ].
now := OperatingSystem getMillisecondTime.
- currentDelta := millisecondDelta rounded.
currentDelta > 16r0fffffff ifTrue:[
"NOTE: the microsecondTime is increasing monotonically,
while millisecondTime is wrapping at 16r1fffffff.
@@ -369,10 +384,10 @@
!Delay class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Delay.st,v 1.51 2014-05-07 14:30:39 stefan Exp $'
+ ^ '$Header$'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Delay.st,v 1.51 2014-05-07 14:30:39 stefan Exp $'
+ ^ '$Header$'
! !