[R] Une boucle While qui ne bloque pas le code entier ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Yarillo
Niveau 5
Niveau 5
Messages : 109
Enregistré le : mer. 11 mai 2011 22:22
Status : Hors ligne

[R] Une boucle While qui ne bloque pas le code entier ?

#1

Message par Yarillo »

Bonjour/bonsoir.
Je commence à ne plus compter le nombre de fois ou je dois vous appeler à l'aide. :lol:
J'ai tenté quelques recherches avant de demander ici, mais ce fut pas très fructueux (Je savais pas quoi chercher à vrai dire).

Le titre est explicite mais il ne correspond pas exactement à mon problème, je m'explique.
Je sais que les boucles While & Until sont dangereuses parce qu'elles ont tendance à bloquer le code si elles sont trop... rapides ?
Bref, j'ai essayé de faire ce code :

Code : Tout sélectionner

Func Main()
    While 1
        Sleep(10000)
        <Choses à faire>
    WEnd
EndFunc

 
Je pensais que la fonction devrait paralyser le code un demi gogolplexe de seconde toutes les 10000millisecondes, mais le Sleep() semble s'appliquer sur tout le script, (donc sur le GUI :/) au lieu de comme je l'aurais voulu juste sur la fonction.
Malheureusement l'ordinateur fait ce qu'on lui dit de faire, et pas ce qu'on veut faire donc... tant que je saurais pas lui signifier, je reste jambon.

Quelqu'un aurait une solution à ce problème ?
Modifié en dernier par Yarillo le ven. 13 mai 2011 22:30, modifié 1 fois.
Avatar du membre
Strofe
Niveau 5
Niveau 5
Messages : 182
Enregistré le : ven. 26 sept. 2008 23:16
Localisation : Picardie, Oise, Beauvais
Status : Hors ligne

Re: [..] Une boucle While qui ne bloque pas le code entier ?

#2

Message par Strofe »

Bonsoir

Je sais que les boucles While & Until sont dangereuses parce qu'elles ont tendance à bloquer le code si elles sont trop... rapides ?

Ah bon ??

Je ne comprends pas votre demande !!! :?:

En quoi la boucle bloque-t-elle le code ???
Y a pas de problème, y a que des solutions. Reste à les trouver.
Avatar du membre
Yarillo
Niveau 5
Niveau 5
Messages : 109
Enregistré le : mer. 11 mai 2011 22:22
Status : Hors ligne

Re: [..] Une boucle While qui ne bloque pas le code entier ?

#3

Message par Yarillo »

Je me doutais que cette phrase allait poser soucis, je savais pas comment la formuler.

Code : Tout sélectionner

#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 625, 443, 193, 125)
$Button1 = GUICtrlCreateButton("Button1", 192, 96, 225, 73, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$TestValue = 0

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            Main()

    EndSwitch
WEnd

Func Main()
    While 1
        $TestValue = $TestValue + 1
    WEnd
EndFunc
 
Voilà l'exemple typique, une interface avec un bouton, quand on appuie sur le bouton ça appelle une boucle While qui va sans cesse ajouter 1 à une variable.
Une fois qu'on aura appuyé sur le bouton, il sera totalement impossible de faire quoi que ce soit sur le GUI.
Avatar du membre
Strofe
Niveau 5
Niveau 5
Messages : 182
Enregistré le : ven. 26 sept. 2008 23:16
Localisation : Picardie, Oise, Beauvais
Status : Hors ligne

Re: [..] Une boucle While qui ne bloque pas le code entier ?

#4

Message par Strofe »

Bonsoir

Normal dans la fonction vous faîtes une boucle infinie.
► Afficher le texte
Y a pas de problème, y a que des solutions. Reste à les trouver.
Avatar du membre
Yarillo
Niveau 5
Niveau 5
Messages : 109
Enregistré le : mer. 11 mai 2011 22:22
Status : Hors ligne

Re: [..] Une boucle While qui ne bloque pas le code entier ?

#5

Message par Yarillo »

Le soucis, c'est que certains scripts peuvent demander l'utilisation d'une boucle de ce type, je m'explique encore plus en détail.

Je veux faire un petit programme qui,
Quand on appuie sur un bouton de lancement, enregistre le code d'une page web , le stocke, attend quelques secondes puis actualise et reprend le code pour vérifier si quelque-chose a changé depuis.

Si quelque-chose a changé ça ouvre une MsgBox
Si rien n'a changé, ça recommence.

Et ce jusqu'à ce qu'on ait cliqué une seconde fois sur le bouton.

C'est le "Jusqu'à ce qu'on ait cliqué une seconde fois sur le bouton" qui pose problème, vu que dès que la boucle est lancée, l'intégralité du script est endormi.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Une boucle While qui ne bloque pas le code entier ?

#6

Message par Tlem »

Regardez du coté de AdlibRegister.
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é".
Avatar du membre
Strofe
Niveau 5
Niveau 5
Messages : 182
Enregistré le : ven. 26 sept. 2008 23:16
Localisation : Picardie, Oise, Beauvais
Status : Hors ligne

Re: [..] Une boucle While qui ne bloque pas le code entier ?

#7

Message par Strofe »

Bonsoir

Je pensais à cela : _Timer_SetTimer
► Afficher le texte

A+
Y a pas de problème, y a que des solutions. Reste à les trouver.
Avatar du membre
Yarillo
Niveau 5
Niveau 5
Messages : 109
Enregistré le : mer. 11 mai 2011 22:22
Status : Hors ligne

Re: [..] Une boucle While qui ne bloque pas le code entier ?

#8

Message par Yarillo »

@Tlem
Excellent, ça fonctionne à merveille.

@Strofe
Excellent aussi, je n'ai pas testé mais ça me sera super utile.

Vous avez décidément réponse à tout. Merci à vous deux. :D
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Une boucle While qui ne bloque pas le code entier ?

#9

Message par jchd »

Il y a une autre possibilité : AutoItSetOption("GUIOnEventMode", 1)
On n'a alors plus besoin d'une boucle pour gérer les messages du GUI.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre