LMS-2_ReportAPI/cgi_daemon.pas
Алексей Заблоцкий e93b74e31b daemon
2023-10-19 01:06:22 +03:00

112 lines
1.9 KiB
ObjectPascal

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.