[..] Faires cohabiter plusieurs boucles via des fonctions

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
hagmar
Niveau 1
Niveau 1
Messages : 4
Enregistré le : jeu. 28 mai 2009 15:09
Status : Hors ligne

[..] Faires cohabiter plusieurs boucles via des fonctions

#1

Message par hagmar »

Bonjour à tous,

J’ai 2 scripts simples contenant 1 boucle while wend, chacune s'exécutant à un intervalle de temps donné.

J’aimerais les fusionner, je dois donc passer par des fonctions, comment dois-je les déclarer pour qu’elles continuent de fonctionner simultanément ?

Merci par avance pour votre aide.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#2

Message par Iste »

Si c'est des boucles "lentes", tu peux soit mettre un compteur dans la boucle et des condition pour executer le code

Code : Tout sélectionner

while 1
    Sleep(1000)
    $i = $i+1
    
    code_a_executer_toutes_les_secondes()
    
    If $i = 10 Then
        $i = 0
        code_a_executer_toutes_les_dix_secondes()
    EndIf
wend
► Afficher le texteOu bien
soit passer par la fonction AdlibEnable()
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#3

Message par Tlem »

Je dirais qu'un bout de code ne ferait pas de mal. Cela éviterait des questions inutiles et des réponses qui peuvent ne pas convenir.
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é".
hagmar
Niveau 1
Niveau 1
Messages : 4
Enregistré le : jeu. 28 mai 2009 15:09
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#4

Message par hagmar »

Code : Tout sélectionner

Run(xxx.exe)
WinWaitActivate("xxxx", "")


Global $Paused
HotKeySet( "{PAUSE}", "Pause")
HotKeySet( "{ESC}", "Sortir")


Func Pause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('EN PAUSE',0,0)
WEnd
ToolTip("")
EndFunc


Func Sortir()
Exit 0
EndFunc

While 1
Send("{F5}")
Sleep(xxxx)
Wend
J'ai donc 2 scripts de ce type lancés en simultané, qui Switch entre 2 applications et en rafraichit l’affichage toute les X minutes. Le nombre d’applications à monitorer allant augmenter, je souhaiterais avoir qu’un script.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#5

Message par Tlem »

Dans l'optique de l'évolution de votre menu, je pense que le plus simple serait de faire une GUI ou un menu systray, et de permettre la sélection du programme à rafraîchir (enregistrement de cette info dans un .ini).
Une fois vos programme sélectionner, une boucle vient lire la liste des programmes à rafraîchir et fait ce qu'elle doit faire.
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é".
hagmar
Niveau 1
Niveau 1
Messages : 4
Enregistré le : jeu. 28 mai 2009 15:09
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#6

Message par hagmar »

bonne idée, je vais creuser cette option.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#7

Message par SagePourpre »

Code : Tout sélectionner

$refresh = ""
$timer = TimerInit()
$ini = "settings.ini"
$iniload = IniReadSectionNames($ini)

While 1
    $time = Round(TimerDiff($timer) / 60000, 0)


    For $i = 1 To $iniload

        If IsInt($time / $refresh) Then
            $refresh = IniRead($ini, $iniload[$i], "refreshtime", "5")
            ; Code pour rafraîchir l'application
        EndIf

    Next
    Sleep(20000)
WEnd
Voici un canvas d'un script faisant ce que tu décris utilisant un timer et un fichier *.ini

Dans le fichier ini
- chaque section représente un programme
on rajoute refreshtime= "X minutes"


Au début du script, un minuteur (timer) est initialisé.

Chaque 20 secondes, le script lit le fichier ini et pour chaque programmes, il vérifie le temps de rafraîchissement
en comparaison avec le minuteur. Si le résultat du minuteur divisé par le temps de rafraîchissement donne un nombre
entier, cela signifie qu'il est temps d'exécuter le code correspondant.

Simple et efficace...
Modifié en dernier par Tlem le sam. 06 juin 2009 12:01, modifié 1 fois.
Raison : Remise en forme du code
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
hagmar
Niveau 1
Niveau 1
Messages : 4
Enregistré le : jeu. 28 mai 2009 15:09
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#8

Message par hagmar »

Vraiment intéressant comme début, c’est vers un script comme cela que je m’orientais.

Actuellement j’ai 3 applications à superviser et chacune ayant 1 ou 2 hotkeys pour rafraichir l’affichage.

Dès que j’arrive à quelque chose qui tourne correctement je le poste ici. A voir après pour une GUI permettant de sélectionner les applis, et donc les scripts à exécuter.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Faires cohabiter plusieurs boucles via des fonctions

#9

Message par SagePourpre »

Oui... Le bout de code que j'ai mis en exemple te permettrait de faire cela relativement facilement...

Par contre, une petite précision s'impose.

J'ai fais une petite erreur que je viens de remarquer.

Cette ligne

Code : Tout sélectionner

$refresh = IniRead($ini, $iniload[$i], "refreshtime", "5")
devrait se trouver avant le If Then et non pas à l'intérieur. :)
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Répondre