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

Reply via email to