[..] Enregistrer une valeur dans une variable à l'envers

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

[..] Enregistrer une valeur dans une variable à l'envers

#1

Message par parazitenew »

Bonjour,

Le titre n'est pas assez clair, j'aimerai enregistrer une valeur issue de Random() après que le nombre ait été tiré.

Aulieu de faire: $rand = Random(1000,5000), on ferait l'inverse, soit: Random(1000,5000) => Enregistrement dans une variable => $rand.

Pourquoi?

J'aimerai executer une fonction tout les X secondes, où X est compris entre 1 et 5s aléatoirement.

Code : Tout sélectionner

AdlibRegister("Fonction",Random(1000,5000)"Enregistrement du chiffre dans une variable")
Pour que je puisse afficher plus loin ce chiffre sur la GUI.

Si je fais le Random() avant le AdlibRegister() le chiffre deviendra fixe.
Une idée?
Modifié en dernier par parazitenew le sam. 19 oct. 2013 21:37, modifié 2 fois.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Enregistrer une valeur dans une variable à l'envers

#2

Message par GaRydelaMer »

Bonjour

une idée comme ca:

Code : Tout sélectionner

Global $timer = TimerInit(), $Rand = Random(1000, 5000)
AdlibRegister("Fonction", $Rand)
Func Fonction()
    AdlibUnRegister("Fonction")

    ConsoleWrite("test: " & $Rand & ", " & TimerDiff($timer) & @LF)


    $Rand = Random(1000, 5000)
    $timer = TimerInit()
    AdlibRegister("Fonction", $Rand)
EndFunc

Func _Exit()
    Exit
EndFunc

;;; Pour arrêter la Démo Touche Alt+X
HotKeySet("!x", "_Exit")

While True
WEnd

 
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: [..] Enregistrer une valeur dans une variable à l'envers

#3

Message par parazitenew »

Donc on désinscrit la fonction pour la réinscrire après avoir généré un nouveau délai d'attente, c'est bien pensé.

Je l'ai adapté à mon script et ça marche, merci. :)
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

Re: [..] Enregistrer une valeur dans une variable à l'envers

#4

Message par lesolutionneur »

Le problème c'est que ce n'est pas très précis, il ne te donne pas la valeur exacte du nombre aléatoire donné en paramètre à AdlibRegister

Voici un code qui correspond mieux à tes attentes :

Code : Tout sélectionner

; Variable globale donnant le rand actuel
Global $g_rand

; Utiliser une fonction pour donner le rand permet de le sauvegarder dans la variable globale
AdlibRegister("Fonction", myRand())

; La fonction devant être exécutée au hasard toutes les x secondes
Func Fonction()
    ;On enlève la fonction actuelle
    AdlibUnRegister("Fonction")
    
    ;Ici tu vois que $g_rand contient le temps actuel
    ConsoleWrite("Temps actuel: " & $g_rand & @CRLF)

    ;On remet la fonction avec un nouveau temps
    AdlibRegister("Fonction", myRand())
EndFunc

; Permet de quitter avec le HotKey
Func _Exit()
    Exit
EndFunc

; On arrête la démo avec Alt + x
HotKeySet("!x", "_Exit")

While True
WEnd

;Cette fonction prend un nombre au hasard, le stocke dans une variable globale puis retourne le nombre aléatoire
Func myRand()
   $g_rand = Random(1000, 5000)
   Return $g_Rand
EndFunc
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: [..] Enregistrer une valeur dans une variable à l'envers

#5

Message par parazitenew »

@ Lesoluionneur merci mais le problème ne concerne pas le rand en lui même mais l'enregistrement de la fonction sous ce rand, pour récolter et afficher le rand j'utilise une autre méthode, la solution dont j'avais besoin était,

Code : Tout sélectionner

AdlibUnRegister()
Random(); Générer un chiffre
AdlibRegister() ; avec le nouveau chiffre
 
C'est le fait de désinscrire et de réinscrire la fonction.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [R] Enregistrer une valeur dans une variable à l'envers

#6

Message par GaRydelaMer »

Surtout que ma solution est exactement la même que lesolutionneur propose regarde cette ligne:

Global $timer = TimerInit(), $Rand = Random(1000, 5000)

la variable $rand est déclarer Globale :p pourquoi faire une fonction en plus pour retourner une valeur dans la variable $Rand une simple affectation de la fonction Random suffit !!!
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

Re: [R] Enregistrer une valeur dans une variable à l'envers

#7

Message par lesolutionneur »

Tu remarqueras que je n'utilise qu'une seule fois la fonction rand et que mon code est allégé dans le sens où il n'utilise pas de timers.
De plus, je me suis conformé à la requête de parazitenew car il voulait récupérer cette variable et ma solution la lui donne exactement !


Mais bon c'est du chipotage, les deux versions marchent !

Edit : nevermind :)
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [R] Enregistrer une valeur dans une variable à l'envers

#8

Message par GaRydelaMer »

Le timer ést la pour la démo, montrer que le temps écouler correspond à la valeur aléatoire de la variable $Rand à quelques micro seconde prés. Dans la demande il nous fournis aucune info sur le contenu de la fonction. Donc pour que la démo soit complète j'ai simplement mis le timer pour illustrer le principe.
Répondre