[R] Autoit et la gestion des boucles

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

[R] Autoit et la gestion des boucles

#1

Message par kalixe »

Coucou,

j'ai fait différents tests pour voir comment autoit gérait cela et constatation, les résultats sont catastrophiques. Il est possible que mon code soit pas du tout optimisé alors je suis dans l'attente de conseils ;)

premier test écriture à la ligne (boucle)
Résultat dépasse pas le cap des 260 (l'arrêt est variable, pas toujours le meme nombre)

Code : Tout sélectionner

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form2", 378, 494, 193, 123)
$Edit1 = GUICtrlCreateEdit("", 24, 40, 329, 433)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibEnable("stop")
While 1
    
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
    for $i=0 to 280000
        GUICtrlSetData($Edit1, $i & @CRLF,1)
    Next

WEnd

Func stop()
    while 1
        $nMsg = GUIGetMsg()
        if $nMsg = $GUI_EVENT_CLOSE then
            Exit
        EndIf
    Wend
EndFunc
 
Deuxieme cas : Ecriture par écrasement (boucle)
résultat : On atteint jamais les 1000 et l'arrêt est variable (jamais au même nombre)

Code : Tout sélectionner

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form2", 378, 494, 193, 123)
$Edit1 = GUICtrlCreateEdit("", 24, 40, 329, 433)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibEnable("stop")
While 1
    
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
    for $i=0 to 280000
        GUICtrlSetData($Edit1, $i)
    Next

WEnd

Func stop()
    while 1
        $nMsg = GUIGetMsg()
        if $nMsg = $GUI_EVENT_CLOSE then
            Exit
        EndIf
    Wend
EndFunc
 
pourquoi de tels dysfonctionnements ? Qu'est-ce qui cloche dans mon code ?
Modifié en dernier par kalixe le jeu. 17 déc. 2009 10:16, modifié 1 fois.
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#2

Message par Yogui »

je n'ai modifier qu'une seule ligne j'ai mieu lol la limite est donnée par le control edit en passant pas un consolewrite je n'ai pas de limitation

Code : Tout sélectionner

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form2", 378, 494, 193, 123)
$Edit1 = GUICtrlCreateEdit("", 24, 40, 329, 433)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
HotKeySet("{ESC}", "stop")
While 1

    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
    for $i=0 to 280000
        GUICtrlSetData($Edit1, $i & @CRLF,1)
;~      Sleep(100)
    Next

WEnd

Func stop()
    while 1
        $nMsg = GUIGetMsg()
        if $nMsg = $GUI_EVENT_CLOSE then
            Exit
        EndIf
    Wend
EndFunc
concernant la seconde méthode dite d'écrasement j'en suis à 120000 et ça tourne toujours ...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#3

Message par Tlem »

Je ne vois aucun dysfonctionnement dans vos codes.
L'arrêt ne ce fait pas sur le même nombre, tout simplement parce que vous utilisez une boucle ultra-rapide et l'affichage ultra-rapide de la valeur de la boucle.
Il faut savoir que votre code fonctionne au rythme de l'horloge interne de votre ordinateur. Mais si un autre programme ou autre chose vient perturber ce rythme, alors les cycles attribués au code ne sont plus les mêmes. De plus la commande GUICtrlSetData() va aussi consommer des cycles d'horloge.

Donc selon tout un tas d'éléments qui varient régulièrement votre code ne fonctionne pas toujours dans les mêmes conditions. :mrgreen:

Essayez de rajouter une pause de 10 ou 20 ms juste après le GuiCtrlSetData() et vous verrez que l'écart est presque inexistant car vous laissez plus de temps à la machine pour exécuter votre code. ;)
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é".
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#4

Message par kalixe »

Alors avec l'ajout d'un sleep(100) après le GUICtrlSetData il se bloque bien avant vers 2 ou 3 et avec un sleep(10) il se bloque vers les 15, donc bien pire qu'à l'origine :?
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#5

Message par kalixe »

Boucle 3 :

je modifie un peu le code et je boucle 6000 fois
Résultat sans sleep dans tout les cas il se stop à 5184 en 3,6 sec

résultat avec sleep met en évidence qu'il continue la boucle jusque 6000 mais que l'affichage de toute façon reste bloqué à 5184

Code : Tout sélectionner

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Timers.au3>

#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form2", 378, 494, 193, 123)
$Edit1 = GUICtrlCreateEdit("", 24, 40, 329, 433)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibEnable("stop")

Local $debut = _Timer_Init()

for $i=0 to 6000
    GUICtrlSetData($Edit1, $i & @CRLF, 1)
Next

Local $timer = _Timer_Diff($debut)
MsgBox(0, "Timer", $timer)

Func stop()
    $nMsg = GUIGetMsg()
    if $nMsg = $GUI_EVENT_CLOSE then
        sortir()
    EndIf
EndFunc

Func sortir()
    Exit
EndFunc
 
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#6

Message par Tlem »

Je pense que vous n'avez pas comprit le sens de ma réponse et moi je pense que je n'ai pas compris ce que vous recherchez exactement.

Évidement que si vous rajoutez une pause dans une boucle, le comptage mettra plus longtemps à s'effectuer ... :roll:

Le soucis, c'est que vous nous décrivez un dysfonctionnement sans expliquer ce que vous cherchez à faire. Donc il est très difficile d'imaginer un résultat sans en connaitre les tenants et les aboutissants.

En regardant vos codes, tout me semble normal et la machine fait exactement ce que vous lui demandez ...
Si vous avez besoin d'un résultat définit, alors faite votre code en conséquence ou expliquez nous ce que vous voulez faire. :roll:
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é".
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#7

Message par kalixe »

Il me semble avoir été clair quand au problème, je ne parle pas de problèmes de temps d'affichage mais d'affichage de TOUS LES RESULTATS lors d'une boucle (et on en est très loin).

Quand je fais une boucle qui me demande d'afficher 6000 résultats, je veux que le script m'affichage bien mes 6000 résultats tout simplement. Si je fais une boucle demandant d'afficher 10000 résultats je veux que le script m'affiche 10000 résultats, tout simplement.

Voila c'est plus clair ? :wink:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#8

Message par Tlem »

Ha ben oui, là au moins c'est clair. :lol:

Hé bien voici :
► Afficher le texte
Par contre, il semble qu'il y ait une limite au nombre de ligne d'un contrôle Edit !!! :shock:
Il ne peut dépasser 5184. Je n'ai pas encore regardé dans la doc pourquoi, mais je n'y manquerai pas.
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
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#9

Message par Yogui »

Yogui a écrit :la limite est donnée par le control edit
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#10

Message par Tlem »

En fait, cette limite est une limite de 32Kb.
Donc selon le contenu, on affiche plus ou moins d'éléments.

Mais heureusement il est possible d'outrepasser cette limite :
► Afficher le texte
Solution trouvée ici : http://www.autoitscript.com/forum/index ... pic=105902
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é".
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Autoit et la gestion des boucles

#11

Message par kalixe »

Ah oui, bah voila, bien joué ;)

@Yogui : le pro du PHP ?
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [R] Autoit et la gestion des boucles

#12

Message par Yogui »

J'ai de bon reste oui lol je pensai pas que mes habitudes en php étaient visible en autoit lol
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [R] Autoit et la gestion des boucles

#13

Message par kalixe »

T'es un peu une "star" dans le monde du PHP on peut dire ;)
Répondre