diff -r 1a63b1db144d -r 3ff0d67ec0af HierarchicalList.st --- 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 $' ! !