#BUGFIX
authorStefan Vogel <sv@exept.de>
Tue, 22 Dec 2015 14:25:55 +0100
changeset 18996 d27c313ccf06
parent 18994 a11e80f4b6c1
child 18997 da0370e39ece
child 18998 0b3297017569
#BUGFIX class: Delay changed: #delay: #setDelayDuration: #until: #wait take care for negative deltas
Delay.st
--- 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$'
 ! !