Boucle infinie

Vous voulez de l'aide ? Postez ici :)
Post Reply
lg256
Posts: 15
Joined: 24 Oct 2013, 15:14

Boucle infinie

Post 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>
User avatar
Jmgr
Admin
Posts: 1651
Joined: 07 Dec 2005, 15:45
Contact:

Re: Boucle infinie

Post 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é.
"My software never has bugs. It just develops random features."
francois
Posts: 460
Joined: 18 Oct 2010, 10:33
Location: France

Re: Boucle infinie

Post 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
User avatar
Jmgr
Admin
Posts: 1651
Joined: 07 Dec 2005, 15:45
Contact:

Re: Boucle infinie

Post 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)
"My software never has bugs. It just develops random features."
lg256
Posts: 15
Joined: 24 Oct 2013, 15:14

Re: Boucle infinie

Post 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?
User avatar
Jmgr
Admin
Posts: 1651
Joined: 07 Dec 2005, 15:45
Contact:

Re: Boucle infinie

Post 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.
"My software never has bugs. It just develops random features."
lg256
Posts: 15
Joined: 24 Oct 2013, 15:14

Re: Boucle infinie

Post 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.
User avatar
Jmgr
Admin
Posts: 1651
Joined: 07 Dec 2005, 15:45
Contact:

Re: Boucle infinie

Post 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...
"My software never has bugs. It just develops random features."
Post Reply