[..] Avoir plusieurs boucles qui fonctionne en même temps

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Myself
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mer. 01 déc. 2010 21:16
Status : Hors ligne

[..] Avoir plusieurs boucles qui fonctionne en même temps

#1

Message par Myself »

Bonjour,
Je suis tout nouveau dans le mode d'autoIT je bloque sur quelques chose de tout bête.
J'aimerai faire en sorte d'avoir plusieurs boucles qui tourne en même temps, qui simulent (pour commencer) des touches du clavier.
Par exemple pendant que "a" est envoyé toutes les 3 secondes "b" est lui envoyé toute les 4 secondes.
J'ai fait ce code, mais ça ne marche pas:

Code : Tout sélectionner

Exemple()
Func Exemple()
    While 1
        a()
        b()
    WEnd
    EndFunc

Func a()
    While 1
        send("a")
        sleep(3000)
    WEnd
EndFunc

Func b()
    while 1
        send("b")
        sleep(4000)
    WEnd
EndFunc
 
ou se trouve mon erreur?

Merci de vos éclaircissements :)
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..]Avoir plusieurs boucles qui fonctionne en même temps

#2

Message par sylvanie »

Bonsoir,
conceptuellement, il n'y a pas d'erreur
Les fonctions sont exécutées l'une après l'autre, et non en parallèle comme vous le souhatez.
une solution consisterait à compiler les 2 fonctions en 2 exe autonomes puis de les lancer via un Run() dans la boucle principale. Run() lance l'exe dans un thread à part et rends la main de suite au script. Et donc là vous aurez bien l'aspect "en parallèle"
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
mystere
Niveau 4
Niveau 4
Messages : 62
Enregistré le : ven. 26 nov. 2010 22:37
Status : Hors ligne

Re: [..]Avoir plusieurs boucles qui fonctionne en même temps

#3

Message par mystere »

Salut Myself, tu ne peux pas faire plusieurs foies dans un scripte.

Code : Tout sélectionner

while 1
; ton code
wend
La dans ton exemple, ton scripte fera infiniment ceci.

a()
b()

Il ne fera pas.

Code : Tout sélectionner

While 1
        send("a")
        sleep(3000)
WEnd
car il est encore à

a()
b()

Pour lancer plusieurs boucles infinies il faut lancer autant de scripte que de boucle infini.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Avoir plusieurs boucles qui fonctionne en même temps

#4

Message par Tlem »

Ce sujet ayant été abordé plusieurs fois, une bonne recherche sur le forum ne ferait pas de mal ...
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
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Avoir plusieurs boucles qui fonctionne en même temps

#5

Message par bloodwolff »

Si c'Est pour un script similaire , AdlibRegister pourrait faire votre bonheur , à condition de ne pas mettre de sleep ni de boucle infini dans la fonction appellé
Compte skype : bloodwolfff
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Avoir plusieurs boucles qui fonctionne en même temps

#6

Message par legend »

@bloodwolf : je suis d'accord pour l'adlib. c'est exactement ce qu'il lui faut.
ps : adlibregister permet d'apeller une fonction chaque intervale de temp a quelques conditions :
pour les boucles infinies, l'adlib déclanchera une centaine de boucles infinies qui augmenteront chaque seconde => pc craqué.
pour le sleep je ne suis pas d'accord.
il est possible de faire un sleep, ce qu'il faut c'est que la fonction déclarée par un adlib ne dépasse pas l'intervale entre l'apel de cette fonction.
par exemple fonction "a" dure 3secondes,
on fait adliregister ("a", 2000)
=> bug similére aux boucles infinie
donc un sleep brief ne fera pas de problémes :)
j'espére que cette petite explication vous a aidé.
Bonne journée
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..] Avoir plusieurs boucles qui fonctionne en même temps

#7

Message par overflow »

Et ben !!!!! Mon CPC est en train de se retourné dans sa tombe la !!!!
Il était un temps ou le multitâche n était qu un rêve ^^

Je n est pas tester mais tu peu aussi t orienté vers un truc comme ca :

Code : Tout sélectionner

$time_a=timerinit()
$time_b=timerinit()
while 1

if timediff($time_a)>3000 then a()

if timediff($time_b)>4000 then b()

wend

func a()
  ; blabla ma fonction
  $time_a=timerinit()
endfunc

func a()
  ; blabla ma fonction
  $time_b=timerinit()
endfunc
 
Avatar du membre
legend
Niveau 7
Niveau 7
Messages : 472
Enregistré le : dim. 26 sept. 2010 12:55
Status : Hors ligne

Re: [..] Avoir plusieurs boucles qui fonctionne en même temps

#8

Message par legend »

il faut tout simplement ajouter un sleep dans ta boucle while wend.
Ce sleep pourra être sleep(10)
Si tu n'a pas besoin d'exécuter cette action trés rapidement tu peux ajouter la durée du sleep.
Bonne journée
Répondre