TXRWEXCLUSIVE: UNE ALTERNATIVE AU TMULTIREADEXCLUSIVEWRITESYNCHRONIZER STANDARD

cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 - 27 mai 2006 à 18:05
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Derniè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.

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

cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
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és 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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.
Rejoignez-nous