Page 1 sur 1

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

Posté : mer. 05 mars 2008 21:41
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.

Re: [..] Help Time Limit

Posté : mer. 05 mars 2008 21:58
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")

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

Posté : jeu. 06 mars 2008 21:18
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 ?

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

Posté : jeu. 06 mars 2008 21:50
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() ?

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

Posté : jeu. 06 mars 2008 22:02
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.

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

Posté : jeu. 06 mars 2008 22:05
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