Am 23.04.2013 22:40, schrieb Anthony Walter:
Thanks for so much Sven. I have another question.
Is it okay for a thread to close itself before it's finished? Because
I believe that is what happens when FreeOnTerminate is set to True.
Here is a brief synopsis of what can execute:
In rtl/objpas/classes/classes.inc
Line 168: FreeThread := Thread.FFreeOnTerminate; // captures free on
termiante
Line 173: Thread.Free; // invokes the destructor from within the thread
Line 197: CloseThread(FHandle); // thread is closed in destructor
TThread.Destroy;
Line 174: EndThread(Result); // flow returns here, but the thread was
already closed
So what it looks like is that we expect code inside a thread continue
running after it has been closed.
That's ok, because the FHandle is information which is retrieved in the
context of the calling thread (e.g. the main thread). And if we don't
need any more information about the thread we just close it's handle
(equivalent to CloseThread) and be done with it. EndThread on the other
hand is called in the context of the called thread.
Afterall you also normally close the thread handle which you get
returned by a CreateProcess(?) call, but keep the process handle around.
With CloseHandle (and the semantically equal CloseThread) you just tell
the system that you don't plan to interact with the object that the
handle references (in this case a thread) anymore.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal