Alex wrote:
The thread can then prevent the program from exiting on exception or
otherwise.
If the garbage collector doesn't kill threads, do I need to break all
encapsulation to call some sort of finalise or destroy function on
every object in case it has a thread object in it ?
It would probably be better to have all core.thread.Threads
registered in the run time so they can be killed when main exits.
they are registered. but not exiting while at least one thread is alive
is deliberate decision.
you may take a look at std.concurrency instead of working with "raw"
threads. besides providing services like message passing, it does
terminate all the spawned threads if their owner dies. you may change
that, of course, this is just a convenient default.
but note that such termination will require calling `receive()` in a
spawned thread. still, i think that message passing feature of
std.concurrency is so useful that there is no reason to bypass it and
invent your own. besides, you may just call `receiveTimeout()` with
small timeout (not zero, there *was* a bug with zero == infinity) in
your thread even if you aren't using standard message passing
mechanics; it is completely harmless.