J'utilise déjà quelques choses dans le style mais j'ai plus de 50 fonctions à encadrer et cela serait plus simple de passer par une procèdure/fonction où j'ai juste à passer en paramètre celle que je veux tester.
Le chronometrage, tu veux le conserver par la suite ?
Effectivement, je ne fais cela que lorsque je constate une lenteur, c'est un code jetable le temps d'optimiser !
Je n'ai jamais conserver une mesure de temps dans une application réelle !
Le Passage de paramètre d'une fonction c'est complexe
En plus là, tu ne passes plus le pointeur sur la fonction mais le résultat de son appel dans les codes ci-dessus
Lit l'article de de SJRD sur les conventions d'appels et comment les bidouiller
Un autre idée, au lieu de passer la méthode directement, il faut passer une classe abstraite ou interface un peu comme le TThread
1 2 3 4 5
| TProcess = Class(TObject)
public
procedure Execute(); virtual; abstract;
procedure CalcTime(AProcessName : String; Logs : TStringList);
end; |
dans le code de CalcTime
1 2 3 4
|
// ChronoStart
Self.Execute();
// ChornoEnd |
un exemple
1 2 3 4 5 6 7 8 9
| TMonProcess = Class(TMonProcess )
private
FParam1: Integer;
FParam2: string;
FResult: Integer;
public
constructor(AParam1: Integer; AParam2: string);
procedure Execute(); override;
end; |
1 2 3 4 5 6 7
|
with TMonProcess.Create(1, 'Deux') do
try
CalcTime('...', Logs);
finally
Free();
end; |
1 2 3 4
| procedure TMonProcess.Execute();
begin
FResult := Length(Param2) - Param1);
end; |
et pour simplifier l'appel, une méthode statique
1 2 3 4
| TMonProcess = Class(TMonProcess )
...
class function Call(AParam1: Integer; AParam2: string; AProcessName : String; Logs : TStringList): Integer;
end; |
1 2 3 4 5 6 7 8 9 10 11
|
class function Call(AParam1: Integer; AParam2: string; AProcessName : String; Logs : TStringList): Integer;
begin
with Self.Create(AParam1, AParam2) do
try
CalcTime(AProcessName, Logs);
Result := FResult;
finally
Free();
end;
end; |
l'appel
TMonProcess.Call(1, 'Deux', '...', Logs);
EDIT avec ton exemple
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| TSetData = Class(TMonProcess)
private
FART_ID : Integer;
FSSF_ID : Integer;
FResult: Integer;
public
constructor Create(ART_ID, SSF_ID : Integer);
procedure Execute(); override;
class function SetData(ART_ID, SSF_ID : Integer) : Integer;
end;
constructor TSetData.Create(ART_ID, SSF_ID : Integer);
begin
FART_ID := ART_ID;
FSSF_ID := SSF_ID;
end;
procedure TSetData.Execute(); override;
begin
Result := FART_ID * FSSF_ID;
end;
class function TSetData.SetData(ART_ID, SSF_ID : Integer; AProcessName : String; Logs : TStringList): Integer;
begin
with Self.Create(ART_ID, SSF_ID) do
try
CalcTime(AProcessName, Logs);
Result := FResult;
finally
Free();
end;
end; |
1 2 3 4 5
|
procedure TCommandeClass.DoMajTable(ADoMaj : Boolean) : Boolean;
begin
Result := TSetData.SetData(ART_ID, SSF_ID, 'SetData', FerrLogs);
end; |
Partager