Priprava na init poolingu uz ve WinService + do TBaseController dat jen FConn a na to okazovat dal

This commit is contained in:
2026-04-30 09:23:44 +02:00
parent 1258a27a4e
commit 18081c6bf8
10 changed files with 224 additions and 69 deletions
+47 -27
View File
@@ -1,15 +1,16 @@
constructor THeoRTNZapisObjMatThread.Create (AOnTerminate: TNotifyEvent; AService: TService);
constructor THeoRTNZapisObjMatThread.Create (AOnTerminate: TNotifyEvent; AService: TService = nil; dm: TdatMod = nil);
begin
inherited Create (false); // Create thread in NOT suspended mode
FMainService:= AService;
FLock:= TCriticalSection.Create;
FRunning:= false;
FTermEvent:= TEvent.Create (nil, False, False, '');
FMainService := AService;
FDataMod := dm;
FLock := TCriticalSection.Create;
FRunning := false;
FTermEvent := TEvent.Create (nil, False, False, '');
// OnTerminate:= AOnTerminate;
// FreeOnTerminate:= true;
FreeOnTerminate:= false; // Ensure manual freeing of thread resources
FreeOnTerminate := false; // Ensure manual freeing of thread resources
end;
@@ -20,11 +21,15 @@
{$IFDEF DEBUG}
Write('Ukoncuji thread RTN Zapis objednavka materialu do ExpPr...');
{$ENDIF}
if (FTimer<>0) then
CloseHandle (FTimer);
FTermEvent.Free;
FRunning:= false;
FMainService:= nil;
try
if (FTimer<>0) then
CloseHandle (FTimer);
FTermEvent.Free;
finally
end;
FRunning := false;
FMainService := nil;
FDataMod := nil;
Terminate;
FLock.Free;
inherited;
@@ -53,6 +58,7 @@
procedure THeoRTNZapisObjMatThread.Execute;
const _Second = 10_000_000;
var lSQL, errMsg, url, outData, fName, loopCasTyp: string;
lokalniConn: boolean;
lLoop, idDigiFile, cnt, idx: Integer;
lLoopMax, koefProCas: integer;
logRunCnt, intTemp: integer;
@@ -141,9 +147,19 @@
if (lLoop=lLoopMax) or (firstRun) then // pri startu a pak kazdou minutu
begin
sqlConnX := TFDConnection.Create (nil);
lokalniConn := (FDataMod<>nil);
if not(lokalniConn) then
begin
sqlConnX := FDataMod.sqlConn;
end
else
begin
sqlConnX := TFDConnection.Create (nil);
sqlConnX.ConnectionDefName := sqlPoolName;
end;
try
sqlConnX.Params.SetStrings (datMod.sqlConnParams);
sqlConnX.Open;
lQry := TFDQuery.Create(nil);
try
lQry.Connection := sqlConnX;
@@ -152,9 +168,9 @@
firstRun:= false;
if (logRunCnt<4) then
datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky materialu do ExpPr c.' + logRunCnt.toString + '...');
FDataMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky materialu do ExpPr c.' + logRunCnt.toString + '...');
if (logRunCnt=4) then
datMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky - bezi, ale dal neloguju');
FDataMod.LogInfo (Quick.Logger.etInfo, 'Spoustim zapis Objednavky - bezi, ale dal neloguju');
try
if not(inProg) then // nebezi uz ?
@@ -162,7 +178,6 @@
if (1=1) then // pro rychle vypnuti
begin
sqlConnX.Open;
if (sqlConnX.Connected) then
begin
inProg:= true;
@@ -174,44 +189,49 @@
if (lQry.RecordCount>0) then
begin
lQry.First;
errMsg:= lQry.FieldByName('ErrMsg').AsString;
errMsg := lQry.FieldByName('ErrMsg').AsString;
if (errMsg<>'') then
begin
datMod.LogInfo (Quick.Logger.etInfo, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg);
FDataMod.LogInfo (Quick.Logger.etInfo, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg);
{$IFDEF DEBUG}
WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg);
WriteLn ('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg);
{$ENDIF}
end;
end;
inProg:= false;
inProg := false;
end; // sql Connected
end; // 1=1
end;
except on E:Exception do
begin
inProg:= false;
errMsg:= E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString;
inProg := false;
errMsg := E.Message; // datMod.sqlQry11.FieldByName('ErrMsg').AsString;
if (mamTabPrijataData) then
begin
datMod.LogInfo (Quick.Logger.etError, 'Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg);
{$IFDEF DEBUG}
WriteLn('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg);
WriteLn ('Zapis Objednavky materialu do ExpPr - chyba: ' + errMsg);
{$ENDIF}
end;
end;
end;
finally
lQry.Close;
lQry.Free;
end;
finally
sqlConnX.Free;
if (lokalniConn) then
begin
sqlConnX.Close;
sqlConnX.Free;
end;
end;
lLoop:= 0;
if (logRunCnt<5) then
lLoop := 0;
if (logRunCnt<6) then // pro vypnuti zprav o zpracovani dat
Inc (logRunCnt);
end; // if lLoop=lLoopMax...
@@ -221,7 +241,7 @@
if (FTimer<>0) then
SetWaitableTimer (FTimer, TLargeInteger(liDueTime), 0, nil, nil, false);
repeat
lBusy:= MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT);
lBusy := MsgWaitForMultipleObjects (1, FTimer, false, INFINITE, QS_ALLINPUT);
until lBusy = WAIT_OBJECT_0;
// Sleep (998);
+1 -1
View File
@@ -2,7 +2,7 @@
{$IFDEF DEBUG}
WriteLn ('Start sluzby Zapis objednavek materialu do ExpPr - inverval 10 minut...');
{$ENDIF}
rtnZapisObjMatThr:= THeoRTNZapisObjMatThread.Create (ThreadTerminated, self);
rtnZapisObjMatThr:= THeoRTNZapisObjMatThread.Create (ThreadTerminated, self, datMod);
if (rtnZapisObjMatThr.Started) then
begin
datMod.LogInfo (Quick.Logger.etInfo, ' OK');
+2 -1
View File
@@ -1,6 +1,7 @@
THeoRTNZapisObjMatThread = class(TThread)
private
FMainService: TService;
FDataMod : TdatMod;
FLock: TCriticalSection;
FTermEvent: TEvent;
FRunning: boolean;
@@ -9,7 +10,7 @@
procedure Execute; override;
procedure TerminatedSet; override; // XE2+ only *
public
constructor Create (AOnTerminate: TNotifyEvent; AService: TService);
constructor Create (AOnTerminate: TNotifyEvent; AService: TService=nil; dm: TdatMod = nil);
destructor Destroy; override;
procedure ThreadTerminate;
end;