ADDTERMINATEPROC |
Ajoute une terminaison de procédure |
---|---|
Free Pascal | sysutils |
Syntaxe
Procedure AddTerminateProc(TermProc:TTerminateProc); |
Paramètres
Nom | Description |
---|---|
TermProc | Ce paramètre permet d'indiquer une procédure du type TTerminateProc, étant exécutée lors de la terminaison du programme. |
Description
Cette procédure permet d'ajouter une procédure à la chaîne d'exécution de sortie.
Remarques
- AddterniminateProc ajoute TermProc à la liste des procédures de sortie. Lorsque le programme sort, la liste des procédures de sortie est exécutée et toutes les procédures sont appelées une par une, dans l'ordre inverse qu'ils ont été ajoutés à la chaîne de sortie.
- Erreurs : Si aucune mémoire n'est disponible sur la mémoire tas, une exception peut être déclenchée.
- Différence avec AddExitProc : Contrairement à AddExitProc, enregistrant une procédure prenant un code de sortie en paramètre (TExitProc), AddTerminateProc enregistre une fonction (TTerminateProc) retournant un booléen et ne prend aucun paramètre.
- Ordre d'exécution des procédures enregistrées : Les fonctions ajoutées via AddTerminateProc sont exécutées dans l'ordre inverse de leur enregistrement lors de la fin du programme. Cela signifie que la dernière fonction ajoutée est exécutée en premier, comme une pile (LIFO : Last In, First Out).
- Fonction retournant un Boolean : La fonction enregistrée doit respecter la signature function:Boolean. Si elle retourne True, l'exécution des autres fonctions de terminaison continue. Si elle retourne False, l'exécution des autres fonctions enregistrées est interrompue immédiatement.
- Effet d'un False dans une fonction TTerminateProc : Si une fonction enregistrée via AddTerminateProc retourne False, les autres fonctions de terminaison ne seront pas exécutées. Cela permet d'empêcher l'exécution de certaines routines de nettoyage si une condition critique est détectée.
- Utilisation dans les applications multi-plateformes : AddTerminateProc est disponible sous Windows, Linux et d'autres plateformes supportées par Free Pascal. Cependant, son comportement peut dépendre du système d'exploitation, notamment si le programme est interrompu brutalement.
- Appel automatique avant la fin du programme : Les fonctions enregistrées avec AddTerminateProc sont appelées automatiquement à la fin du programme, qu'il se termine normalement ou suite à un appel à Halt. Toutefois, elles ne s'exécutent pas si le processus est arrêté brutalement (exemple kill -9 sous Linux).
- Ne remplace pas les gestionnaires de signaux : AddTerminateProc ne doit pas être confondu avec les gestionnaires de signaux (fpSignal sous Unix/Linux). Il ne permet pas d'intercepter des événements système comme SIGTERM ou SIGINT, mais seulement d'ajouter des procédures de terminaison propres au programme.
Exemple
L'exemple suivant permet d'ajouter plusieurs fonctions de terminaison :
- Program TestAddTerminateProc;
-
- Uses
- SysUtils;
-
- Function Nettoyage1:Boolean;Begin
- WriteLn('Exécution de Nettoyage1...');
- Nettoyage1:=True; { Continue l'exécution des autres procédures de terminaison }
- End;
-
- Function Nettoyage2:Boolean;Begin
- WriteLn('Exécution de Nettoyage2...');
- Nettoyage2:=False; { Arrête l'exécution des autres procédures }
- End;
-
- Function Nettoyage3: Boolean;Begin
- WriteLn('Exécution de Nettoyage3...');
- Nettoyage3:=True; { Ne sera pas exécuté si Nettoyage2 renvoie False }
- End;
-
- BEGIN
- AddTerminateProc(@Nettoyage1);
- AddTerminateProc(@Nettoyage2);
- AddTerminateProc(@Nettoyage3);
-
- WriteLn('Fin du programme.');
- END.
Dernière mise à jour : Mardi, le 25 Août 2020