[R] Boucle While et sortie de secours

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
antolionel74
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 oct. 2012 09:27
Status : Hors ligne

[R] Boucle While et sortie de secours

#1

Message 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 ?
Modifié en dernier par antolionel74 le mer. 15 oct. 2014 16:28, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#2

Message par orax »

Pour éviter les blocages, tu peux utiliser le mode OnEventMode. Et voir ProcessClose() pour fermer le ping.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#3

Message 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.)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
antolionel74
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 oct. 2012 09:27
Status : Hors ligne

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

#4

Message 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
Modifié en dernier par TommyDDR le mer. 15 oct. 2014 16:43, modifié 3 fois.
Raison : Ajout de la balise code DANS la balise spoil
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#5

Message 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
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
antolionel74
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 oct. 2012 09:27
Status : Hors ligne

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

#6

Message par antolionel74 »

Oui, c'est bien ça, mes timeout étaient trop court.
Merci beaucoup
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#7

Message par jguinch »

N'oublie pas de passer le sujet en [R] si le problème est résolu.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre