Page 1 of 1

Boucle infinie

Posted: 15 Mar 2014, 14:46
by lg256
Bonjour je me demandais pourquoi ce type de code donne une boucle infinie

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<scriptfile>
    <settings program="actionaz" version="3.7.0" scriptVersion="1.0.0" os="Windows"/>
    <actions>
        <action name="ActionCallProcedure" version="1.0.0"/>
        <action name="ActionLoop" version="1.0.0"/>
        <action name="ActionEndProcedure" version="1.0.0"/>
        <action name="ActionMessageBox" version="1.0.0"/>
        <action name="ActionVariable" version="1.0.0"/>
        <action name="ActionCode" version="1.0.0"/>
        <action name="ActionBeginProcedure" version="1.0.0"/>
    </actions>
    <parameters/>
    <script pauseBefore="0" pauseAfter="0">
        <action name="ActionVariable">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <exception id="32" action="0" line=""/>
            <parameter name="colorValue">
                <subParameter name="value" code="0">::</subParameter>
            </parameter>
            <parameter name="variable">
                <subParameter name="value" code="0">a</subParameter>
            </parameter>
            <parameter name="type">
                <subParameter name="value" code="0">integer</subParameter>
            </parameter>
            <parameter name="value">
                <subParameter name="value" code="0">0</subParameter>
            </parameter>
            <parameter name="positionValue">
                <subParameter name="value" code="0">:</subParameter>
            </parameter>
        </action>
        <action name="ActionCallProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="name">
                <subParameter name="value" code="0">a</subParameter>
            </parameter>
        </action>
        <action name="ActionCode">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="code">
                <subParameter name="value" code="1">a++;</subParameter>
            </parameter>
        </action>
        <action name="ActionMessageBox">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="windowIcon">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="message">
                <subParameter name="value" code="0">$a</subParameter>
            </parameter>
            <parameter name="title">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="textMode">
                <subParameter name="value" code="0">automatic</subParameter>
            </parameter>
            <parameter name="ifYes">
                <subParameter name="line" code="0"></subParameter>
                <subParameter name="action" code="0">do_nothing</subParameter>
            </parameter>
            <parameter name="customIcon">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="icon">
                <subParameter name="value" code="0">none</subParameter>
            </parameter>
            <parameter name="type">
                <subParameter name="value" code="0">ok</subParameter>
            </parameter>
            <parameter name="ifNo">
                <subParameter name="line" code="0"></subParameter>
                <subParameter name="action" code="0">do_nothing</subParameter>
            </parameter>
        </action>
        <action name="ActionLoop">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="line">
                <subParameter name="value" code="0">002</subParameter>
            </parameter>
            <parameter name="count">
                <subParameter name="value" code="0">5</subParameter>
            </parameter>
        </action>
        <action name="ActionBeginProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="name">
                <subParameter name="value" code="0">a</subParameter>
            </parameter>
        </action>
        <action name="ActionEndProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
        </action>
    </script>
</scriptfile>

Re: Boucle infinie

Posted: 17 Mar 2014, 22:39
by Jmgr
Salut, j'ai l'impression que c'est un bug. Apparemment l'action de boucle ne se remet pas à 0 lorsque la procédure retourne à l'action qui suit l'appel de la procédure. Merci de l'avoir signalé.

Re: Boucle infinie

Posted: 19 Mar 2014, 07:07
by francois
Bonjour,

Suite au bug signalé j'ai fait un petit script :
//=======================
for(i=1;i<3;i=i+1)
{
Console.print("Dans boucle, avant appel procédure ")
Script.callProcedure('toto');
Console.print("Dans boucle, après appel procédure ")
}
Console.print("Après boucle ")
//======================

La procédure toto contient une ligne :
Console.print("Dans la procédure")


Le résultat :
===============================
"Dans boucle avant appel procédure "
"Dans boucle après appel procédure "

"Dans boucle avant appel procédure "
"Dans boucle après appel procédure "

"Dans boucle avant appel procédure "
"Dans boucle après appel procédure "

"après boucle "

"Dans la procédure "
===============================

Francois

Re: Boucle infinie

Posted: 19 Mar 2014, 10:32
by Jmgr
Ça par contre, c'est normal. Comme l'appel de procédure est une nouvelle action elle ne sera effective qu'à la fin de l'action actuelle. Ce n'est peut-être pas super intuitif, mais je ne peux pas vraiment faire autrement, à moins d'autoriser l'exécution de plusieurs actions en même temps. (et ça c'est vraiment compliqué et générateur de bugs)

Re: Boucle infinie

Posted: 12 Jun 2014, 12:34
by lg256

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<scriptfile>
    <settings program="actionaz" version="3.8.0" scriptVersion="1.1.0" os="Windows"/>
    <actions>
        <action name="ActionStop" version="1.0.0"/>
        <action name="ActionCallProcedure" version="1.0.0"/>
        <action name="ActionLoop" version="1.0.0"/>
        <action name="ActionEndProcedure" version="1.0.0"/>
        <action name="ActionMessageBox" version="1.0.0"/>
        <action name="ActionVariable" version="1.0.0"/>
        <action name="ActionCode" version="1.0.0"/>
        <action name="ActionPixelColor" version="1.0.0"/>
        <action name="ActionBeginProcedure" version="1.0.0"/>
    </actions>
    <parameters/>
    <resources/>
    <script pauseBefore="0" pauseAfter="0">
        <action name="ActionCallProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="name">
                <subParameter name="value" code="0">2</subParameter>
            </parameter>
        </action>
        <action name="ActionBeginProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="name">
                <subParameter name="value" code="0">2</subParameter>
            </parameter>
        </action>
        <action name="ActionVariable">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <exception id="32" action="0" line=""/>
            <parameter name="colorValue">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="variable">
                <subParameter name="value" code="0">a</subParameter>
            </parameter>
            <parameter name="type">
                <subParameter name="value" code="0">integer</subParameter>
            </parameter>
            <parameter name="value">
                <subParameter name="value" code="0">0</subParameter>
            </parameter>
            <parameter name="positionValue">
                <subParameter name="unit" code="0">0</subParameter>
                <subParameter name="value" code="0"></subParameter>
            </parameter>
        </action>
        <action name="ActionCode" label="++">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="code">
                <subParameter name="value" code="1">a++;</subParameter>
            </parameter>
        </action>
        <action name="ActionCallProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="name">
                <subParameter name="value" code="0">1</subParameter>
            </parameter>
        </action>
        <action name="ActionLoop">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="line">
                <subParameter name="value" code="0">++</subParameter>
            </parameter>
            <parameter name="count">
                <subParameter name="value" code="0">17</subParameter>
            </parameter>
        </action>
        <action name="ActionMessageBox" label="postboucle">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="windowIcon">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="message">
                <subParameter name="value" code="0">$a</subParameter>
            </parameter>
            <parameter name="title">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="textMode">
                <subParameter name="value" code="0">automatic</subParameter>
            </parameter>
            <parameter name="ifYes">
                <subParameter name="line" code="0"></subParameter>
                <subParameter name="action" code="0">do_nothing</subParameter>
            </parameter>
            <parameter name="customIcon">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="icon">
                <subParameter name="value" code="0">none</subParameter>
            </parameter>
            <parameter name="type">
                <subParameter name="value" code="0">ok</subParameter>
            </parameter>
            <parameter name="ifNo">
                <subParameter name="line" code="0"></subParameter>
                <subParameter name="action" code="0">do_nothing</subParameter>
            </parameter>
        </action>
        <action name="ActionStop" enabled="false">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
        </action>
        <action name="ActionEndProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
        </action>
        <action name="ActionBeginProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
            <parameter name="name">
                <subParameter name="value" code="0">1</subParameter>
            </parameter>
        </action>
        <action name="ActionPixelColor" comment="ne se verifie pas" timeout="200">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="2" line="postboucle"/>
            <parameter name="comparison">
                <subParameter name="value" code="0">equal</subParameter>
            </parameter>
            <parameter name="greenTolerance">
                <subParameter name="value" code="0">0</subParameter>
            </parameter>
            <parameter name="variable">
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="blueTolerance">
                <subParameter name="value" code="0">0</subParameter>
            </parameter>
            <parameter name="redTolerance">
                <subParameter name="value" code="0">0</subParameter>
            </parameter>
            <parameter name="ifTrue">
                <subParameter name="line" code="0"></subParameter>
                <subParameter name="action" code="0">do_nothing</subParameter>
            </parameter>
            <parameter name="ifFalse">
                <subParameter name="line" code="0"></subParameter>
                <subParameter name="action" code="0">wait</subParameter>
            </parameter>
            <parameter name="positionOffset">
                <subParameter name="unit" code="0">0</subParameter>
                <subParameter name="value" code="0"></subParameter>
            </parameter>
            <parameter name="pixel">
                <subParameter name="position" code="0">1180:1058</subParameter>
                <subParameter name="color" code="0">9:554:122</subParameter>
            </parameter>
        </action>
        <action name="ActionEndProcedure">
            <exception id="0" action="0" line=""/>
            <exception id="1" action="0" line=""/>
            <exception id="2" action="1" line=""/>
        </action>
    </script>
</scriptfile>
Pourquoi la boucle continue ? la ligne stop est bien executée si activé,est-ce normal?

Re: Boucle infinie

Posted: 12 Jun 2014, 13:33
by Jmgr
Non, il y a bien un problème d'incompatibilité (bug) entre les procédures et l'action Boucle. Je n'ai pas le temps de m'en occuper en ce moment, mais tu peux remplacer cette action Boucle par un bout de code.

Re: Boucle infinie

Posted: 14 Jun 2014, 20:07
by lg256
Je pensais que ce cas était different désolé. Ca marche très bien avec du code ou des actions(une variable initialisée , incrementée et une condition de variable si quelqu'un a ce soucis).
Merci.

Re: Boucle infinie

Posted: 27 May 2015, 20:56
by Jmgr
Pour info : ce n'est pas à proprement parler un bug, en fait, comme précisé dans la doc :
Vous ne devriez pas utiliser d'action d'Aller à, d'action conditionnelle ou sauter en dehors de la procédure car cela va empêcher l'exécution de reprendre après l'action qui a appelé la procédure
Et là c'est exactement le problème : l'action Couleur de Pixel saute en dehors de la procédure. Du coup ça perturbe l'exécution du script.
Je me demande s'il ne faudrait pas déclencher une erreur systématiquement lorsque l'on saute en dehors d'une procédure ? Comment détecter ce cas de figure ? À étudier...