If your containing object "frees [the thread] in it's destructor", then
you are taking responsibilty for the destruction of the thread. Thus you
should set FreeOnTerminate to False.

If you want FreeOnTerminate to be True, then you should only terminate
the thread, and not free it. Of course, if the thread accesses objects
that die along with the container object then you will get access
violations.

To ensure that you free the thread only after it has completed
execution, you could use:

aThread.Create(Suspended);
aThread.FreeOnTerminate := False;
aThread.Resume;
...
aThread.Terminate;
aThread.WaitFor; //Or whatever it is..
aThread.Free;

This will ensure that the thread completes execution before it is freed.
The thread that is executing the above code will block until the target
thread ceases execution.



-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On Behalf Of Phil Middlemiss
Sent: Wednesday, August 25 2004 9:23 a.m.
To: [EMAIL PROTECTED]; NZ Borland Developers Group - Delphi List
Subject: Re: [DUG] Threads


I've played with setting FreeOnTerminate to False, but in that case I
have
to manually call Terminate and also manually Free the object - it's a
reusable component and I don't want any other components to have to do
anything special other than Terminate the thread.

Phil.

----- Original Message ----- 
From: "Sandeep Chandra" <[EMAIL PROTECTED]>
To: "NZ Borland Developers Group - Delphi List" <[EMAIL PROTECTED]>
Sent: Wednesday, August 25, 2004 8:51 AM
Subject: Re: [DUG] Threads


> Hi Phil
>
> Try setting FreeOnTerminate to false if you want to free threadobject
> yourself.
>
> Regards
>
> Sandeep
>
> >Hi all,
> >
> >I have a thread object that, for some reason, the destructor is being
called
> >twice. I've stripped the app down to a fairly simple shell around the
thread
> >and all I am doing is creating the object that holds onto the thread,
and
> >then freeing it. The containing object creates the thread in it's
> >consctructor and frees it in its destructor. Any one know what is
causing
> >this?
> >
> >Cheers,
> >Phil.
> >
> >_______________________________________________
> >Delphi mailing list
> >[EMAIL PROTECTED]
> >http://ns3.123.co.nz/mailman/listinfo/delphi
> >
> >
> >
> >
>
>
> _______________________________________________
> Delphi mailing list
> [EMAIL PROTECTED]
> http://ns3.123.co.nz/mailman/listinfo/delphi

_______________________________________________
Delphi mailing list
[EMAIL PROTECTED]
http://ns3.123.co.nz/mailman/listinfo/delphi

_______________________________________________
Delphi mailing list
[EMAIL PROTECTED]
http://ns3.123.co.nz/mailman/listinfo/delphi

Reply via email to