Looks like I am going to have to. Any idea why this would behave this way? I've looked at other source code that has FreeOnTerminate set to true, and I can't see any significant differences between theirs and my code.
Cheers, Phil. ----- Original Message ----- From: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, August 25, 2004 11:11 AM Subject: RE: [DUG] Threads > Yeah probably because you have FreeOnTerminate set to true. > I would do as Allan suggested below and set FreeOnTerminate to false > Then free the thread yourself > > aThread.Terminate; > aThread.WaitFor; > aThread.Free; > > you in which case you should reference any > > > -----Original Message----- > > From: Phil Middlemiss [mailto:[EMAIL PROTECTED] > > Sent: Wednesday, 25 August 2004 10:50 a.m. > > To: NZ Borland Developers Group - Delphi List > > Subject: Re: [DUG] Threads > > > > > > 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 > > > _______________________________________________ > 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
