Page 1 sur 1

[..] Limiter temps d'execution

Posté : mar. 26 mai 2009 10:33
par jcaspar
B :D onjour à tous !
Je souhaiterais limiter le temps d'execution d'un script à 5 secondes par exemple afin d'eviter un bouclage en cas de problème

Pouvez vous svp m'expliquer si cela est possible et comme dois je procéder.

Merci d'avance pour vos conseils et idées

Jean Marc

Re: [..]Limiter temps d'execution

Posté : mar. 26 mai 2009 11:00
par TaPuZ
Allez, je me lance!
Tout dépend de ce que tu recherches comme sécurité et de la complexité de ton script.
La réponse la plus bateau serait de te dire d'utiliser la commande sleep(5000), pour faire une pause de 5000 ms, soit 5 secondes.
Tu peux aussi imaginer faire une boucle For ... Next, demandant à ton script de s'exécuter un nombre fini de fois.
Tu peux aussi imaginer faire un hotkey en assignant à une touche (ou une combinaison de touches) un appel de fonction de sortie du programme. Ainsi, tu es sur que si tu appuies sur ta touche de raccourci, ton programme s'arrete.
Enfin, tu peux aussi penser à mettre des petites pauses dans tes boucles, histoire de ne pas trop surcharger ton proc lors d'opérations ultra répétitives...
Bref tout dépend de ce que tu recherches exactement, et rien ne t'empêche de tout combiner...
That's up to you...
Voilà, je ne sais pas si j'ai vu juste, mais comme c'était mon 1/4 d'heure je me la pète, j'ai tenté...
A bientôt.
T@PµZ.

Re: [..]Limiter temps d'execution

Posté : mar. 26 mai 2009 11:47
par SagePourpre
Dans le cas où tu veux seulement avoir un moyen d'arrêter le script sans définir préalablement le
nombre d'exécution voulue à l'avance, tu peux utiliser :


Le premier code fonctionne ainsi, tant que tu n'appuies pas sur la touche "END" ou "FIN" du clavier, le script continue
(Cependant, il est fort possible que tu aies à tenir la touche 2-3 secondes pour que ça fonctionne)

Code : Tout sélectionner

#include<misc.au3>

while Not _IsPressed("23")
    MsgBox(0,"Poke system","") ; Code à exécuter 
    Sleep(1000)
    
WEnd




Sinon, ce code fonctionne sensiblement de la même façon

On vérifie la variable $stop à la fin de chaque cycle et, si jamais sa valeur tombe à 1, on sort
de la boucle (dans ce cas parce que la fonction stopscript à été déclenché lorsque la touche "END" ou "FIN"
à été pressée) Dans ce cas,

Code : Tout sélectionner

$stop = 0
HotKeySet("{END}","stopscript")


startscript()


Func startscript()
    While 1
        MsgBox(0,"Poke","",1)
    
        If $stop = 1 Then
                    $stop = 0
            ExitLoop
        EndIf
    Wend
EndFunc

Func stopscript()
$stop = 1
EndFunc


Tout dépend de ce que tu veux faire exactement.

Sinon, tu peux utiliser

For $i = 1 to 5 (où 5 représente le nombres de répétitions à effectuer)
Next

Re: [..] Limiter temps d'execution

Posté : mar. 26 mai 2009 13:58
par Iste
voici une autre facon, pour que ca se fasse tout seul

Code : Tout sélectionner

$temps = TimerInit ( )

AdlibEnable("Temps")

While 1
    Sleep(50)
WEnd

Func Temps()
    If TimerDiff ($temps) > 5000 Then Exit
EndFunc
AdlibEnable("Temps")
Lance la fonction "Temps" toute les 250ms
La fonction "Temps" vérifi le temps écoulé entre le TimerInit() et le TimerDif() (en ms), si c'est sup a 5seconde, on quite

/!\ ca protege des scripts qui tournent en boucle, mais pas des plantages ! /!\

Re: [..] Limiter temps d'execution

Posté : mar. 26 mai 2009 17:46
par Tlem
Toutes ces solutions sont pas mal (celle du AdlibEnable est de loin la plus simple) mais ....

Et oui il y à un mais. AutoIt ne sachant pas gérer le vrai multitâche, il ne peut faire deux choses réellement en parallèle.
Donc dans le cas ou le code principale vient à ce bloquer, le reste du script ne peut s'exécuter et donc point de salut. :lol:

La solution pour être sur à 99,99% que le script s'arrête au bout d'un temps déterminé, c'est d'externaliser la partie qui doit contrôler le script principal.

Le principe en lui même est tordu, mais simple. Il suffit au script principal de générer le fichier de contrôle du processus principal et de le lancer. Ensuite le script continue normalement et lorsque le moment est venu, le script de contrôle ferme le script principale.

Mais comme je le dit souvent, un dessin vaut mieux qu'un long discours :
► Afficher le texteKillMyProcess