[c/win32][vista] exemple d'utilisation des transactions.

Soyez le premier à donner votre avis sur cette source.

Vue 3 768 fois - Téléchargée 214 fois

Description

Yop à tous,

Voici un programme qui ne sert à rien en tant que tel, mais sont but est de montré comment créer et utiliser les transactions.

Qu'est ce qu'une transaction ? : C'est un objet kernel qui permet de régrouper plusieurs instructions et de valider leur actions uniquement lorsque l'on fait un commit. Elles sont gérées par l'infrastructure KTM (Kernel Transaction Management).

A quoi elles servent ? : A rendre les applications plus sécurisée, plus fiable. Imaginez (comme dans cet exemple) que vous avez codé un programme qui crée des clefs dans la bdr et que on le sais pour quel raison il survient une erreur , dans ce cas vous pouvez soit annuler ces actions ou revenir en arrière dans votre programme.

Remarque : Ce programme montre l'utilisation de transaction dans le cadre de la bdr, mais ce n'est pas le seul domaine de présence des transactions, elles sont aussi présentent dans les fichiers (CreateFileTransacted, DeleteFileTransacted , CopyFileTransacted , ... ) , ... .

Remarque bis : Toute les APIs concernant les transactions à cet adresse :
http://msdn.microsoft.com/en-us/library/aa366273(VS.85).aspx . Je pense que le code est assez clair et ne nécéssite pas plus amples précisions.

Programme : Si vous cliquez sur le bouton "Go", vous pouvez aller voir dans la bdr, et vous verez que les clefs n'ont pas encore été crées. Cliquez sur le bouton "Commit" ce qui valide la transaction et vous verez que ho magie! les clef ont été crées. Le bouton "Cancel" fait un Rollback complet de la transaction, en gros il l'annule. Si vous faite un commit après vous aurrez une erreur ;).

Source / Exemple :


// Voir le .zip

Conclusion :


Ce programme n'a pas d'utilité en soit. Ces juste pour montrer l'existence des transactions.

J'attend vos commentaires bon ou mauvais avec impatience ^^

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

deck_bsd
Messages postés
1244
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1 -
Ha oui daccord, boruillon dans ce sens ^^ . Ba pour la police, mettre tout les HWND dans un tableau et puis parcourire ^^ , mais bon cela ne m'avait pas vraiment choquer de faire ligne par ligne mdr
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7 -
C'est vrai pour la boucle de FindWindowEx(). C'est juste pour compacter le code quand la vitesse n'est pas une priorité. C'est une habitude chez moi. Pour les lignes brouillon il s'agit des blocs mis en commentaires notamment celui de la fonction WinMain() et de la structure MSG.
deck_bsd
Messages postés
1244
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1 -
Merci RACPP , ok pour PoliceTahoma. Mais en se qui concerne l'affectation de la police, avec la boucle tu appel x fois la fonction FindWindowEx alors que ce n'est pas vraiment nécessaire, de plus si jamais il y a des controle ou tu ne veux pas affecter la police ... . Sinon des lignes boruillon ? lesquelles ?
racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
7 -
Salut,
Merci pour l'exemple. Je ne savais pas que ces APIs existaient. Elles serviront certainement un jour.
Remarques:
Il est préférable de ne pas déclarer la police PoliceTahoma pendant le traitement de WM_CREATE. La déclarer plutôt en static à l'entrée de AppWndProc() permettra de la détruire avec DeleteObject() suite du WM_DESTROY.
Tu peux économiser une dizaine de lignes de code en utilisant une boucle pour affecter cette police à tous les controles:
HWND child=0;
while(child=FindWindowEx(hwnd,child,0,0)) SendMessage(child,WM_SETFONT,(WPARAM)PoliceTahoma ,0);
Le code contient des lignes brouillon qu'il convient d'enlever.
Exar >> Tu peux remplacer la fonction myWinMain() écrite en assembleur par un classique WinMain() en C. Elle contiendra un appel à InitInstance() suivi de la boucle des messages. Ce genre de point d'entrée comme myWinMain() permet d'accélérer le démarrage de l'application et de minimiser la taille de l'exécutable en évitant la CRT.
Bonne continuation.
cs_exar
Messages postés
287
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
1 -
Très intéressant ! Mais serait-il possible de commenter l'assembler ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.