[R] Mettre un temps limite à l'execution d'un code.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

[R] Mettre un temps limite à l'execution d'un code.

#1

Message par Kikoolol »

Bonjour/Bonsoir a tous/toutes, merci d'avance pour ceux/celles qui me répondront.

Donc je vais globalement résumer :

Je suis dans une boucle, et dans cette boucle, il y'a une fonction qui tourne... en boucle.
Cette fonction recherche sur une grande plage différents pixels.
Seulement la fonction m'as l'air un peu complexe et je n'ose pas y toucher, ce que je voudrais lui dire, c'est qu'au bout de par ex X secondes, il arrête de chercher le pixel et que la fonction s'arrête.
Donc je vous met le code :

Code : Tout sélectionner

Func RechercherUnMob($X1, $Y1, $X2, $Y2, $Speed)
    local $Anycoleur = _ArrayCreate(4090058, 4090058, 15657702, 16570436, 11292712, 8994849, 14721300, 10027008, 6209586, 8270923, 16746121, 4879842)
    local $mob = _ArrayCreate("") 
    local $NbColors = 12
    local $i = 0
    local $res
    
    Do
        ;MsgBox(4096, "Mobs rechercher", $mob[$i], 90)
        $res = SearchPixel($X1, $Y1, $X2, $Y2, $Anycoleur[$i], $Speed)
        $i = Mod($i + 1, $NbColors)
    Until $res[0] < 5
    Return $res
EndFunc
Merci d'avoir lu.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Help Time Limit

#2

Message par Tlem »

Kikoolol a écrit :ce que je voudrais lui dire, c'est qu'au bout de par ex X secondes, il arrête de chercher le pixel et que la fonction s'arrête.
Avant votre boucle, initialisez un timer avec TimerInit, puis dans votre boucle, contrôler le temps passé avec TimerDiff (Attention le temps est exprimé en millisecondes).

Un fois le temps dépassé, sortez de la boucle avec ExitLoop.

Cela donne quelque chose comme ceci :

Code : Tout sélectionner

$begin = TimerInit()

While 1  ; <= Boucle infinie
    
sleep(500) ; Pause de 500 Millisecondes.
$Dif = Int(TimerDiff($begin)/1000) ; Calcul du temps en secondes et arrondit.
If $Dif >= 5 Then ExitLoop  ; Si plus de 5 secondes on sort de la boucle

WEnd ; Fin de boucle

MsgBox(0,"Titre","Le script à durer " & $Dif & " secondes")
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é".
Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

Re: [..] Mettre un temps limite à l'execution d'un code.

#3

Message par Kikoolol »

Alors voilà ce que j'ai écrit :

Code : Tout sélectionner

Local $Dif = 0
$begin = TimerInit()

While PixelGetColor( 999, 539) = 16777215
    RechercherUnMob(219, 180, 672, 418, 2) ; donc là il cherche les pixels en boucle jusqu'a qu'il en trouve un. (C'est là qu'il faut qui passe au bout de X secondes)
    sleep(500) ; Pause de 500 Millisecondes.
    $Dif = Int(TimerDiff($begin)/1000) ; Calcul du temps en secondes et arrondit.
    If $Dif >= 5 Then ExitLoop  ; Si plus de 5 secondes on sort de la boucle
WEnd
Seulement le script bloque a la fonction "rechercherunmob" et donc je crois que le seul moyen ce serait de modifier cette même fonction non ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Mettre un temps limite à l'execution d'un code.

#4

Message par Tlem »

Kikoolol a écrit :Seulement le script bloque a la fonction "rechercherunmob" et donc je crois que le seul moyen ce serait de modifier cette même fonction non ?
Vous voulez dire que le code tourne en rond à l'intérieur de la fonction RechercherUnMob() ?
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é".
Kikoolol
Niveau 5
Niveau 5
Messages : 100
Enregistré le : mer. 05 mars 2008 18:18
Status : Hors ligne

Re: [..] Mettre un temps limite à l'execution d'un code.

#5

Message par Kikoolol »

Tlem a écrit :
Kikoolol a écrit :Seulement le script bloque a la fonction "rechercherunmob" et donc je crois que le seul moyen ce serait de modifier cette même fonction non ?
Vous voulez dire que le code tourne en rond à l'intérieur de la fonction RechercherUnMob() ?
Exact, enfin du moin je crois, la fonction et cité plus haut.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Mettre un temps limite à l'execution d'un code.

#6

Message par Tlem »

Hé bien dans ce cas, c'est dans la fonction RechercherUnMob() qu'il faut mettre les lignes du timer ...
Comme ceci :

Code : Tout sélectionner

Func RechercherUnMob($X1, $Y1, $X2, $Y2, $Speed)
    local $Anycoleur = _ArrayCreate(4090058, 4090058, 15657702, 16570436, 11292712, 8994849, 14721300, 10027008, 6209586, 8270923, 16746121, 4879842)
    local $mob = _ArrayCreate(""), $NbColors = 12, $i = 0, $res, $Dif, $begin = TimerInit()
    
    Do
        ;MsgBox(4096, "Mobs rechercher", $mob[$i], 90)
        $res = SearchPixel($X1, $Y1, $X2, $Y2, $Anycoleur[$i], $Speed)
        $i = Mod($i + 1, $NbColors)
        
        $Dif = Int(TimerDiff($begin)/1000) ; Timer
        If $Dif >= 5 Then ExitLoop           ; Timer
        
    Until $res[0] < 5
    Return $res
EndFunc
 
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