[PERL] Souci de $SIG{ALRM}

Résolu/Fermé
Ninja_En_Short Messages postés 133 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 27 juin 2014 - 31 août 2009 à 11:48
Ninja_En_Short Messages postés 133 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 27 juin 2014 - 31 août 2009 à 12:08
Bonjour,

J'ai un souci avec une de mes interruptions dans mon programme.

Voilà un morceau du corps, il est modifié pour raison de confidentialité mais tout fonctionne hormis l'interruption :

eval
{
local $SIG{ALRM} = sub {return -1};
alarm $temps = 5; #Temps est un paramètre de la fonction passé plus haut, je lui mets 5 secondes pour l'exemple

while($tableau_fichier)
{
#Traitements sur les fichiers

#Incrémentation d'un compteur
$nbreFichiersTraites++;

#Le programme attends dix secondes
sleep 10;
}

#Si tout est passé le compteur passe à 0.
alarm 0;
};

#On retourne le compteur
return $nbreFichiersTraites;

Le souci se situe au niveau du sleep. Il attends dix secondes entre chaque traitement puis m'affiche qu'il a effectué tous les traitements... et je comprends pas pourquoi vu que l'interruption est sensée se déclencher au bout de 5 secondes.

Si quelqu'un voit mon erreur merci à lui.
A voir également:

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
31 août 2009 à 12:07
Salut,

If you want to use alarm() to time out a system call you need to use an eval()/die() pair.

Si on utilise alarm() pour interruption on doit utiliser la paire eval() / die()
0
Ninja_En_Short Messages postés 133 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 27 juin 2014 9
31 août 2009 à 12:08
Ca a marché.

Merci bien ;)
0