TXRWEXCLUSIVE: UNE ALTERNATIVE AU TMULTIREADEXCLUSIVEWRITESYNCHRONIZER STANDARD
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 2010
-
27 mai 2006 à 18:05
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 2010
-
28 mai 2006 à 21:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 28 mai 2006 à 21:27
Pour tes autres remarques, je préfère ne pas faire de zip pour avoir un source qu'on peut directement copier-coller. Et pour ce qui est du class(TObject), inherited Destroy et autre, ça permet d'alléger l'écriture, donc je ne suis pas certain que ce soit important...
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 28 mai 2006 à 21:25
ah oui il y a un problème pour GetValue, il faut en fait utiliser:
function TXTLS.GetValue: Pointer;
var
e:Cardinal;
begin
Result := TlsGetValue(FIndex);
e:=GetLastError;
if e<>ERROR_SUCCESS then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
j'ai extrait le code d'une de mes sources où j'avais un gestionnaire d'erreur personnalisé.
La référence est obligatoire, GetLastError enlève la dernière valeur de la pile d'erreur et donc ont perdrait le message sans la référence
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 28 mai 2006 à 20:24
pourquoi ne pas avoir fait un zip avec un petit fichier .PAS ?
ensuite juste une petite correction de rien du tout :
TXTLS = class
en plus propre ça donne :
TXTLS = class(TObject)
on peu egalement preciser Base ou Custom dans le nom de la classe pour preciser que cette classe sert a etre derivée.
TBaseXTLS ou TCustomXTLS
autre petite corrections :
on evite les locales inutiles :
function TXTLS.GetValue: Pointer;
begin
Result := TlsGetValue(FIndex);
if GetLastError <> ERROR_SUCCESS then
RaiseLastOSError;
end;
on appel la destruction correctement :
destructor TXRWExclusive.Destroy;
begin
if FTotalReadLockCount > 0 then
raise Exception.Create('Object still locked while destroying instance');
FSection.Free;
FUnLockEvent.Free;
inherited Destroy;
end;
d'une maniere generale on precise les inherited :
inherited Create;
inherited Destroy;
sinon c'est bien, code propre mais manque de commentaires.
28 mai 2006 à 21:27
28 mai 2006 à 21:25
function TXTLS.GetValue: Pointer;
var
e:Cardinal;
begin
Result := TlsGetValue(FIndex);
e:=GetLastError;
if e<>ERROR_SUCCESS then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
j'ai extrait le code d'une de mes sources où j'avais un gestionnaire d'erreur personnalisé.
La référence est obligatoire, GetLastError enlève la dernière valeur de la pile d'erreur et donc ont perdrait le message sans la référence
28 mai 2006 à 20:24
ensuite juste une petite correction de rien du tout :
TXTLS = class
en plus propre ça donne :
TXTLS = class(TObject)
on peu egalement preciser Base ou Custom dans le nom de la classe pour preciser que cette classe sert a etre derivée.
TBaseXTLS ou TCustomXTLS
autre petite corrections :
on evite les locales inutiles :
function TXTLS.GetValue: Pointer;
begin
Result := TlsGetValue(FIndex);
if GetLastError <> ERROR_SUCCESS then
RaiseLastOSError;
end;
on appel la destruction correctement :
destructor TXRWExclusive.Destroy;
begin
if FTotalReadLockCount > 0 then
raise Exception.Create('Object still locked while destroying instance');
FSection.Free;
FUnLockEvent.Free;
inherited Destroy;
end;
d'une maniere generale on precise les inherited :
inherited Create;
inherited Destroy;
sinon c'est bien, code propre mais manque de commentaires.