Now I am getting an error during the call to WaitFor - "Project .... raised
exception class EOSError with message 'System Error. Code:6. The handle is
invalid'....'. I copied over the classes.pas unit into my path and traced
through - the error occurs in the TThread.Destroy method where it calls
CloseHandle on line 9066 (Delphi 6). I'm not calling any other methods on
the thread - just creating it then calling terminate and waitfor.

Any ideas?

Cheers,
Phil.
----- Original Message ----- 
From: "Allan, Samuel" <[EMAIL PROTECTED]>
To: "NZ Borland Developers Group - Delphi List" <[EMAIL PROTECTED]>
Sent: Wednesday, August 25, 2004 9:40 AM
Subject: RE: [DUG] Threads


> 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
>

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

Reply via email to