[fpc-pascal] How to get a data module to notify of events?

Martin Schreiber mse00000 at gmail.com
Thu Sep 15 16:48:51 CEST 2011


On Thursday 15 September 2011 16:28:29 Frank Church wrote:
> I have a form with some threaded objects that notify another form of events
> by calling one of that forms events.
> 
> I want to convert to a data module and any interested object to register
> for those notifications.
> 
> My idea is for each thread to have some kind of list of procedure types and
> each interested object registers its routine eg.
> 
> This is the data module. It is a rough sketch and may have some syntax
> errors
> 
> Type TOneArg = Procedure (Var X : integer);
> 
> > type
> > 
> >   TMonitorObject = class(TThread)
> >   private
> >   
> >     InterestedObjects: TList
> >     procedure DispatchOutput;
> >     procedure DisplayRawOutput;
> >   
> >   protected
> >   
> >     procedure Execute; override;
> >   
> >   public
> >   
> >     constructor Create(CreateSuspended: Boolean);
> >     RegisterInterest(interestedProc:TOneArg);
> >   
> >   end;
> > 
> > TMonitorObject.RegisterInterest(TOneArg);
> > begin
> > 
> >    InterestedObjects.Add(interestedProc);
> > 
> > end;
> > 
> > procedure TMonitorObject.DispatchOutput;
> > begin
> > 
> >    foreach InterestedObject do
> >    
> >     InterestedObject.Procedure.Execute;
> > 
> > end;
> > 
> > constructor TMonitorObject.Create(CreateSuspended: Boolean);
> > begin
> > 
> >   inherited Create(CreateSuspended);
> >   InterestedObjects := TList.Create
> >   FCycleComplete := True;
> > 
> > end;
> 
> Do the procedures for the objects which require notification need to be
> constructed in some way?
> 
MSEgui has such a notification mechanism with automatic unlinking by 
destroying the objects, see tobjectlinker in lib/common/kernel/mseclasses.pas.
Another possibility is to use a tobjectevent descendant and 
application.postevent.

> Am I on the right track here? I am particularly interested in what happens
> when the objects passing the routines are destroyed without the data module
> knowing about it.

The program most likely will crash. :-)

Martin



More information about the fpc-pascal mailing list