[..] Limiter temps d'execution

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jcaspar
Niveau 7
Niveau 7
Messages : 449
Enregistré le : mar. 23 sept. 2008 17:58
Status : Hors ligne

[..] Limiter temps d'execution

#1

Message 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
TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [..]Limiter temps d'execution

#2

Message 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.
A bientôt,
T@PµZ.
____________________________________
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..]Limiter temps d'execution

#3

Message 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
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Limiter temps d'execution

#4

Message 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 ! /!\
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11816
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Limiter temps d'execution

#5

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre