Page 1 sur 1

[R] Deux Whiles en même temps

Posté : sam. 19 sept. 2009 10:14
par DJSIR
Bonjour. J'ai une petite question.

J'ai un script (normal..) et j'ai plusieurs choses a modifier au cours du script.

J'ai une liste, et quand je clique sur un item, un label se change.. enfin, moi j'appelle sa le rafraichissement..

Après, plus bas, j'ai deux labels que je dois changer toutes les deux secondes "Sleep(2000)" et cela arrête la boucle aussi.

J'ai donc essayé While 2 mais sans succes.

Si je met dans une fonction, cela stoppe la boucle principale...

Alors, personne ?

Re: [..] Deux Whiles en même temps

Posté : sam. 19 sept. 2009 11:02
par Iste
Le sujet a été aborder encore et encore et encore et encore et encore....
La solution sera surement un AdlibEnable() pour ton label
Si ce n'est pas possible, a chaque passage de la grosse boucle, tu peux mettre ceci

Code : Tout sélectionner

$Timer = TimerInit()

While 1
    ;blabla
    If TimerDiff($Timer) > 2000 Then
        ;MAJ label
        $Timer = TimerInit()
    EndIf
WEnd
La condition mettra a jour le label toute les 2sec, mais ca sera surement plus lourd :s

Re: [..] Deux Whiles en même temps

Posté : sam. 19 sept. 2009 11:24
par DJSIR
Rien ne fonctionne ou j'ai mal compris. du coup, j'ai regardé les "encore et encore et encore"
J'ai pris ce petit bout de code :

Code : Tout sélectionner

AdlibEnable("_boucle2",101)
_boucle1()

Func _boucle1()
    While 1
        Sleep(100)
        MsgBox(0,"", "1")
        ExitLoop
    Wend   
EndFunc 

Func _boucle2()
    Sleep(100)
    MsgBox(0,"", "2")
EndFunc 
EndFunc
Chez moi il n'y a que 2 qui s'affiche et 1 jamais... normalement je devrais avoir une alternance

Re: [..] Deux Whiles en même temps

Posté : sam. 19 sept. 2009 11:41
par Iste
Un peu d'effort siouplé !

Il ne faut pas mettre de sleep dans la fonction appelé par l'AdlibEnable
La dans le code, voila ce qui se passe
- On appel la fonction _boucle2 tout les 101ms
- Donc on l'appel
- _boucle2 met le script en pause 100ms
- _boucle2 attend qu'on lui dise ok
- On dit ok, mais ca y est, ca fait plus de 100ms
- Donc on appel _boucle2....

Voici un exemple fonctionel

Code : Tout sélectionner

AdlibEnable("_boucle2",100)

While 1
    Sleep(200)
    Beep(500,50)
Wend  

Func _boucle2()
    Beep(2000,50)
EndFunc
MAis dans _boucle2, evite a tout prix les fonction du genre msgbox, sleep ou beep qui mettent le script en pause

Re: [..] Deux Whiles en même temps

Posté : sam. 19 sept. 2009 11:42
par SagePourpre
Il n'y aura pas d'alternance pour deux raison.


À la fin de ta boucle 1, il y'a exitloop, ce qui sort de ta boucle 1 pour ne laisser que ton adlibenable
exécuter la boucle 2 sans arrêt.

Si tu veux une alternance entre les deux boucles, premièremement, tu dois enlever le exitloop de
la première boucle pour ne pas la quitter immédiatement après sa première exécution.

Ensuite, met le délai de ton adlibenable à 1000 ms plutôt que 100 ms ...

Tu vas voir les deux msgbox s'exécuter correctement
► Afficher le texte

Re: [..] Deux Whiles en même temps

Posté : sam. 19 sept. 2009 16:26
par DJSIR
Merci, après deux tests, la deuxième fonction de Iste fonctionne...

Résolu !