Page 1 sur 1

[R] Boucle While et sortie de secours

Posté : mer. 15 oct. 2014 11:23
par antolionel74
Bonjour,

J'ai un problème un peu particulier.

Je souhaite faire un programme qui exécute une tache en boucle, en l’occurrence un "ping -t".

Jusque là pas de problème, mais je voudrais pouvoir stopper cette boucle pour retourner dans le programme principale.

Et c'est là que se pose le problème car je n'arrive pas a faire quelque chose de propre.

J'ai essayer de placer dans ma boucle infini une fonction :

Code : Tout sélectionner

Func event()
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
EndFunc
seulement ça ferme tout le programme et en plus ce n'est pas réactif, défois il faut cliquer plusieurs fois avant que ça ne réagisse.

L'idéale serait de pouvoir créer un genre de processus autonome que l'on pourrait facilement stopper dans le programme princiaple. Mais est-ce possible dans autoit.

peut être avez vous une autre méthode à me proposer ?

Re: [..] Boucle While et sortie de secours

Posté : mer. 15 oct. 2014 12:41
par orax
Pour éviter les blocages, tu peux utiliser le mode OnEventMode. Et voir ProcessClose() pour fermer le ping.

Re: [..] Boucle While et sortie de secours

Posté : mer. 15 oct. 2014 13:55
par TommyDDR
antolionel74 a écrit :

Code : Tout sélectionner

        Case $GUI_EVENT_CLOSE
            Exit
seulement ça ferme tout le programme
Vous demandez de fermer le programme donc le programme est fermé, je ne vois pas le problème.

Sinon pour votre problème, je suis du même avis que orax, le mode évenementiel est tout aussi bien si ce n'est mieux et votre code sera beaucoup plus clair.
(Je n'utilise personnellement que ce mode dans tous mes scripts.)

Re: [..] Boucle While et sortie de secours

Posté : mer. 15 oct. 2014 14:54
par antolionel74
Il faut que je creuse votre méthode, mais je ne cerne encore pas bien la différence avec le mode "switch" de détection des événement d'une fenêtre.

Entre temps, j'avais fait le script ci-dessous avec la fonction "AdLibRegister()" glanée sur un autre site et qui fonctionne bien tant que le retour du ping est "0" ; je peux alors stopper la boucle grace au bouton "stop" sans pour autant quitter le programme, mais si le ping sort un code d'erreur autre que "0" alors mon bouton stop ne fonctionne plus et tout est bloqué et je ne comprend pas pourquoi. il ne me manque plus qu'a solutionner ce problème pour arriver au fonctionnement que je voulais au départ.

auriez vous une idée de pourquoi si le ping retourne autre chose que 0, tout se bloque ?

Cordialement,
Lionel

Pour clarifier le code j'ai enlevé tous les effet graphique de grisage des boutons
► Afficher le texte

Re: [..] Boucle While et sortie de secours

Posté : mer. 15 oct. 2014 15:11
par jguinch
Merci d'utiliser la balise Spoiler pour le code de plus de 10 lignes.
Sinon, je pense que ça gèle un peu ta GUI parce que le AdlibRegister prends toute la place...
Est-ce que tu as vraiment besoin que cette fonction soit exécutée toutes les 250ms :?:
Juste 1 seconde serait suffisant, non ?

Code : Tout sélectionner

AdlibRegister("let_ping", 1000)
Sinon, tu peux laisser 250ms par défaut et réduire la fréquence des ping en cas de non réponse :
► Afficher le texte

Re: [..] Boucle While et sortie de secours

Posté : mer. 15 oct. 2014 15:23
par antolionel74
Oui, c'est bien ça, mes timeout étaient trop court.
Merci beaucoup

Re: [..] Boucle While et sortie de secours

Posté : mer. 15 oct. 2014 15:58
par jguinch
N'oublie pas de passer le sujet en [R] si le problème est résolu.