unit cgi_daemon; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DaemonApp, ConnectionsDmUnit; type TLMSReportCGI=class; { TDaemonThread } TDaemonThread=class(TThread) fOwner: TLMSReportCGI; fData: TConnectionsDM; procedure Execute;override; function sleepMin(n: integer): boolean; constructor Create(AOwner: TLMSReportCGI); end; { TLMSReportCGI } TLMSReportCGI = class(TDaemon) procedure DataModuleCreate(Sender: TObject); procedure DataModuleDestroy(Sender: TObject); procedure DataModuleStart(Sender: TCustomDaemon; var OK: Boolean); procedure DataModuleStop(Sender: TCustomDaemon; var OK: Boolean); private workThread: TDaemonThread; public end; var LMSReportCGI: TLMSReportCGI; implementation procedure RegisterDaemon; begin RegisterDaemonClass(TLMSReportCGI) end; {$R *.lfm} { TLMSReportCGI } procedure TLMSReportCGI.DataModuleCreate(Sender: TObject); begin workThread := TDaemonThread.create(self); end; procedure TLMSReportCGI.DataModuleDestroy(Sender: TObject); begin workthread.free; end; procedure TLMSReportCGI.DataModuleStart(Sender: TCustomDaemon; var OK: Boolean); begin workThread.Start; OK := true; end; procedure TLMSReportCGI.DataModuleStop(Sender: TCustomDaemon; var OK: Boolean); begin workThread.Terminate; end; { TDaemonThread } procedure TDaemonThread.Execute; begin fData := TConnectionsDM.Create(nil); try fData.Start; while not terminated do begin if sleepMin(2) then fData.Idle(self); end; fData.Stop; finally fData.free; end; end; function TDaemonThread.sleepMin(n: integer): boolean; var i: integer; begin for i := 1 to n*60 do begin if terminated then break else sleep(1000); end; result := not terminated; end; constructor TDaemonThread.Create(AOwner: TLMSReportCGI); begin inherited Create(true); fOwner:=AOwner; end; initialization RegisterDaemon; end.