Michael van der Gulik
squeakml at gulik.co.nz
Mon Aug 21 10:27:08 UTC 2006
Bert Freudenberg wrote:
>> 2. I have an object with a process "in" it. How can I make sure that
>> process is terminated when there are no more references to that object?
> Terminate the process when you release the last reference to the
> object. Like, send #release to your object before setting the ref to nil.
> Only as a last resort, use finalization.
I thought of a better option today: Create a "PollingService" singleton.
The process I needed was just meant to slowly poll something.
Rather than doing "[[self doSomething] repeat ] fork", I could ask the
PollingService to poll me on a regular basis. The polling service would
have something like:
| o |
o := myWeakArray at: n.
[ o isNil ] whileFalse: [ o poll. o:= myWeakArray at: n. ].
So that when the object is garbage collected, the thread would also stop
iterating. A very useful pattern!
This could maybe even be done on the class side of that object.
I hope the small amount of time between loop iterations is enough to get
the GC to make the weak reference nil.
More information about the Squeak-dev