TXRWEXCLUSIVE: UNE ALTERNATIVE AU TMULTIREADEXCLUSIVEWRITESYNCHRONIZER STANDARD

Signaler
Messages postés
600
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
6 avril 2010
-
Messages postés
600
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
6 avril 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37804-txrwexclusive-une-alternative-au-tmultireadexclusivewritesynchronizer-standard-de-delphi

Messages postés
600
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
6 avril 2010
1
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...
Messages postés
600
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
6 avril 2010
1
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
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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.