On 4 October 2011 11:14, Michael Schnell <[email protected]> wrote: > On 10/04/2011 11:37 AM, Frank Church wrote: > >> >> What is the purpose of the while not Terminated in a threads execute loop? >> If a thread is doing its own thing and knows when or not it has finished >> what is the purpose of the while not Terminated >> > In Lazarus (and Delphi), "Worker Threads" can't have an "Event Loop" and so > "event driven programming" (using "On..." procedures for the user code) is > not possible. That is why in a Thread the user needs to create the "Loop" > himself. Such a Thread should always run to a stall in some blocking library > functions, lest it will take 100 % CPU time. > > >> Is Terminated designed to be called by other procedures besides the thread >> itself? Can a thread be Terminated externally? >> This also seems to imply that if the code within the while not Terminated >> loop is a long running sequence a Termniate command will not be processed >> until control returns to the beginning of the loop >> > A thread should terminate itself by exiting the Execute procedure. If not > "FreeOnTerminate" is set. after termination the main thread should free the > TThread object. > > >> Can a thread respond to a new Execute command while it already Executing? >> > No. > > Do threads have ways of being interrogated about their state while >> Executing? >> > There are lots of ways of doing inter-thread communication. Simplest: any > (no "ThreadVar") variable can mutually be read and written. A good > (portable) way of notifying the Main thread about a state change is > "Application.QueueAsyncCall". "TThread.Synchronize" calls a main thread > event while stalling the thread for some indefinite amount of time. > > I am looking at Application.QueueAsyncCall and the only parameter it takes in addition to the method pointer is a PrtInt. That seems to limit the options passed compared with TThread.Synchronize. Can the PtrInt be cast to a pointer to a richer data structure?
> >> Suspend and Resume have been deprecated, and I want to know how a thread >> can be suspended. >> > Using Semaphores like "TCriticalSection". > > >> If a thread is not set to FreeOnTerminate, can a thread suspend itself by >> using Terminate or some other custom function, doing some clean ups and >> waiting so it can be restarted by the Start procedure, by adding some custom >> fields to make it itself aware that it is an a paused state, so that when an >> Execute is sent it look up those fields, set Terminated to false and >> continue as though nothing has happened? >> >> In certain applications (if it is not supposed to stall and wait) the > main thread needs to check multiple times whether a TThread instance in fact > is "Terminated" and thus can be freed. > > -Michael > > > -- > ______________________________**_________________ > Lazarus mailing list > [email protected].**freepascal.org<[email protected]> > http://lists.lazarus.**freepascal.org/mailman/**listinfo/lazarus<http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus> > -- Frank Church ======================= http://devblog.brahmancreations.com
-- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
