A voir également:
- [PERL] boucle While (debutant)
- Boucle excel sans macro - Forum Excel
- Boucle cmd - Forum Programmation
- Freebox redémarre en boucle ✓ - Forum Freebox
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
8 réponses
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
8 févr. 2008 à 12:43
8 févr. 2008 à 12:43
hello
la boucle tourne plusieurs fois dans la même seconde, essayer d'ajouter un sleep:
utiliser usleep
For delays of finer granularity than one second, the Time::HiRes module (from CPAN, and starting from Perl 5.8 part of the standard distribution) provides usleep(). You may also use Perl's four-argument version of select() leaving the first three arguments undefined, or you might be able to use the syscall interface to access setitimer(2) if your system supports it. See perlfaq8 for details.
la boucle tourne plusieurs fois dans la même seconde, essayer d'ajouter un sleep:
my ($secondes) = localtime(time); while( $secondes < 58 ) { print "$secondes\n"; sleep 1 ; my ($secondes) = localtime(time); }
utiliser usleep
For delays of finer granularity than one second, the Time::HiRes module (from CPAN, and starting from Perl 5.8 part of the standard distribution) provides usleep(). You may also use Perl's four-argument version of select() leaving the first three arguments undefined, or you might be able to use the syscall interface to access setitimer(2) if your system supports it. See perlfaq8 for details.
oups!
Je viens de tester le script .
La probleme reste toujours un peu le meme, la variable $seconde ne reprend pas de nouvelle valeur dans la boucle while de la seconde en cours..
Ainsi avec ton script comme sortie j'ai
16
16
16
16
alrors que dans mon idée je devrais avoir avec un sleep d'une seconde
16
17
18
19
si tu vois quelque chose
thx !
++
Je viens de tester le script .
La probleme reste toujours un peu le meme, la variable $seconde ne reprend pas de nouvelle valeur dans la boucle while de la seconde en cours..
Ainsi avec ton script comme sortie j'ai
16
16
16
16
alrors que dans mon idée je devrais avoir avec un sleep d'une seconde
16
17
18
19
si tu vois quelque chose
thx !
++
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
8 févr. 2008 à 13:11
8 févr. 2008 à 13:11
Salut,
c'est normal tu affiche la seconde avant le sleep ;-)
c'est normal tu affiche la seconde avant le sleep ;-)
lami20j@debserv:~$ vi sec.pl #!/usr/bin/perl use strict;use warnings; my ($secondes) = localtime(time); while( $secondes < 58 ) { sleep 1 ; ($secondes) = localtime(time); print "$secondes\n"; } __END__
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
8 févr. 2008 à 13:14
8 févr. 2008 à 13:14
et sans le my
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
8 févr. 2008 à 13:16
8 févr. 2008 à 13:16
le 1er oui ;-) à cause de pragmas use strict;use warnings;
Oui merci ..
Ca marche ..
Je ne sais pas pourquoi je dois ne pas reutiliser my ..
Je sais , que je suis pas tres bon ..lol :-)
Il n'empeche que grace a vous et a Lami20j j'ai quelques scripts qui tournent en batch...
Merci , a l'occasion de cette reponse un merci a tous les contribueurs PERL donc :-) pour les pauvres debutants que nous sommes..
je vais essayer dutiliser usleep , apres en avoir bavé hier pour installer une librairie autre..
Menfin c'est le metier qui rentre.
Sinon j'ai vu quil existait la fonction alarm qui a priori declenche une action a une seconde donnée..
a plus ++
Ca marche ..
Je ne sais pas pourquoi je dois ne pas reutiliser my ..
Je sais , que je suis pas tres bon ..lol :-)
Il n'empeche que grace a vous et a Lami20j j'ai quelques scripts qui tournent en batch...
Merci , a l'occasion de cette reponse un merci a tous les contribueurs PERL donc :-) pour les pauvres debutants que nous sommes..
je vais essayer dutiliser usleep , apres en avoir bavé hier pour installer une librairie autre..
Menfin c'est le metier qui rentre.
Sinon j'ai vu quil existait la fonction alarm qui a priori declenche une action a une seconde donnée..
a plus ++
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
8 févr. 2008 à 13:36
8 févr. 2008 à 13:36
Quand tu déclare au début my ($secondes) il s'agit d'une variable locale au paquetage
La variable est transmise à la boucle while et ensuite elle sera réinitialiser avec des nouveaux appel à localtime
Ca ne sers à rien de déclarer à nouveau une variable $secondes avec my (qui sera locale pour le bloc while ) à moins que tu ne veux pas que la variable d'origine change de contenu;
La variable est transmise à la boucle while et ensuite elle sera réinitialiser avec des nouveaux appel à localtime
Ca ne sers à rien de déclarer à nouveau une variable $secondes avec my (qui sera locale pour le bloc while ) à moins que tu ne veux pas que la variable d'origine change de contenu;
Pour info,
Et si ca peut aider quelqun a un jour
Voici le script final.
J'ai du installer la librairie Time::HiRes afin d'avoir un sleep en dessous de la seconde.
Voici donc le script qui va donc jusqu'a 58secondes en checkant tous les 1 dizieme de seconde
#!/usr/bin/perl
use Time::HiRes;
use strict;use warnings;
my ($secondes) = localtime(time);
while( $secondes < 58 )
{
Time::HiRes::sleep (0.1);
($secondes) = localtime(time);
print "$secondes\n";
}
__END__
on peut aissi checker tous les 5 centiemes grace a
Time::HiRes::sleep (0.05);
a bientot !
Et si ca peut aider quelqun a un jour
Voici le script final.
J'ai du installer la librairie Time::HiRes afin d'avoir un sleep en dessous de la seconde.
Voici donc le script qui va donc jusqu'a 58secondes en checkant tous les 1 dizieme de seconde
#!/usr/bin/perl
use Time::HiRes;
use strict;use warnings;
my ($secondes) = localtime(time);
while( $secondes < 58 )
{
Time::HiRes::sleep (0.1);
($secondes) = localtime(time);
print "$secondes\n";
}
__END__
on peut aissi checker tous les 5 centiemes grace a
Time::HiRes::sleep (0.05);
a bientot !