--- a/HierarchicalList.st Thu Jul 08 11:27:25 1999 +0200
+++ b/HierarchicalList.st Thu Jul 08 13:26:59 1999 +0200
@@ -228,6 +228,22 @@
!
+monitoringCycle
+ "the block evaluated
+ "
+ |index item|
+
+ item := root.
+ index := showRoot ifTrue:[1] ifFalse:[0].
+
+ [item notNil] whileTrue:[
+ item monitoringCycle.
+ Processor yield.
+ index := index + 1.
+ item := self at:index ifAbsent:nil.
+ ]
+!
+
removeDependent:anObject
"stop the monitoringTask if no more dependencies exists
"
@@ -242,47 +258,21 @@
startMonitoringTask
"start the monitoring task; success only if dependencies exists
"
- |task|
-
( monitoringTask isNil
and:[monitoringTaskDelay notNil
and:[dependents size ~~ 0]]
) ifTrue:[
- task := monitoringTask := [|index item delay|
- index := showRoot ifTrue:[1] ifFalse:[0].
-
- [true] whileTrue:[
- item := index == 0 ifTrue:[root]
- ifFalse:[self at:index ifAbsent:nil].
-
- item isNil ifTrue:[
- delay := self monitoringTaskDelay.
-
- delay isNil ifTrue:[ "/ process might terminate
- task ~~ monitoringTask ifTrue:[
- self terminate
- ].
- Processor yield
- ] ifFalse:[
- Delay waitForSeconds:delay.
-
- task ~~ monitoringTask ifTrue:[ "/ task has changed
- self terminate
- ]
- ].
- index := showRoot ifTrue:[1] ifFalse:[0].
- ] ifFalse:[
- item monitoringCycle.
- Processor yield.
- index := index + 1.
- ]
+ monitoringTask := [|delay|
+ [(delay := self monitoringTaskDelay) notNil] whileTrue:[
+ self monitoringCycle.
+ Delay waitForSeconds:delay.
]
] forkAt:4.
+
+ monitoringTask addExitAction:[ monitoringTask := nil ].
].
^ true.
-
-
!
stopMonitoringTask
@@ -331,5 +321,5 @@
!HierarchicalList class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalList.st,v 1.3 1999-07-06 16:49:23 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalList.st,v 1.4 1999-07-08 11:26:59 cg Exp $'
! !