ALARM |
Alarme |
|---|---|
Perl |
POSIX |
Syntaxe
| sub POSIX::alarm($seconde); |
Paramètres
| Nom | Description |
|---|---|
| $seconde | Ce paramètre permet d'indiquer le nombre de secondes. |
Description
Cette fonction permet de fixer le nombre de seconde de «SIGALARM».
Remarques
- Déclenche un signal SIGALRM après un délai : La fonction POSIX::alarm($secondes) permet de programmer l'envoi du signal SIGALRM au processus appelant après un délai spécifié en secondes. Cela peut être utilisé pour interrompre une opération dépassant un temps limite, comme une lecture bloquante.
- Utilisation typique pour gérer les dépassements de délais : Elle est très utile pour implémenter des dépassements de délais, par exemple lors d'accès à des ressources externes comme des bases de données ou des sockets. En cas de dépassement de délai, un gestionnaire de signal peut prendre le relais pour gérer l'erreur.
- Un seul minuteur actif à la fois : Perl ne permet qu'un seul alarm actif par processus. Si alarm est appelée plusieurs fois, l'appel précédent est annulé et remplacé par le nouveau. Cela signifie qu'il faut gérer soigneusement les minuteurs dans les programmes complexes.
- Retourne le temps restant de l'alarme précédente : Lorsque vous appelez alarm($x), la fonction retourne le nombre de secondes restantes de l'alarme précédente, s'il y en avait une. Cela permet de sauvegarder l'état ou d'annuler proprement une minuterie précédente.
- Peut être désactivée en passant 0 : Passer la valeur 0 à alarm désactive l'alarme en cours. Cela permet d'interrompre un délai programmé sans déclencher le signal SIGALRM, ce qui est pratique lorsqu'une opération s'est terminée plus vite que prévu.
- N'a aucun effet si aucun gestionnaire de signal n'est défini : Sans définition explicite d'un gestionnaire pour SIGALRM (via $SIG{ALRM}), le signal interrompt le programme par défaut. Pour des traitements spécifiques (comme afficher un message ou relancer une tâche), il faut définir une fonction associée.
- Résolution en secondes entières : La fonction POSIX::alarm fonctionne uniquement avec des valeurs entières représentant des secondes. Pour des durées plus précises (fractions de secondes), il faut utiliser d'autres mécanismes comme Time::HiRes::alarm.
- Influence possible sur d'autres modules : Certains modules Perl utilisent alarm en interne pour gérer leurs propres dépassements de délais. L'utilisation explicite de cette fonction dans le même script peut entraîner des conflits ou des comportements imprévus si elle n'est pas bien coordonnée.
Exemple
Voici un exemple montrant l'exécution d'une boucle sans fin pendant 3 secondes :
on obtiendra le résultat semblable au suivant :
Démarrage...Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
... continue un certain temps dépendamment de la capacité de la machine...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Attend...
Fin!
Voir également
Langage de programmation - Perl - Référence de procédures et fonctions - alarm
Langage de programmation - Fonction C pour Linux - alarm
Dernière mise à jour : Dimanche, le 18 octobre 2015