IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[javascript] comment interrompre l'exécution d'un script?


Sujet :

JavaScript

  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 287
    Billets dans le blog
    2
    Par défaut [javascript] comment interrompre l'exécution d'un script?
    Bonjour à tous,

    j'ai une page html, qui comporte un activeX, et une fonction javascript qui ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function MaFonction() 
    {
       var toto = UnTruc();
       MonActiveX.FaitQuelqueChose(toto);
       FaitUnAutreTruc();
    }
    Ce qui se passe, c'est que l'exécution de MonActiveX.FaitQuelqueChose(toto); prend un certain temps, et la fonction FaitUnAutreTruc(); est appelée alors que MonActiveX.FaitQuelqueChose(toto); n'a pas achevé son exécution.

    Ce que je voudrais, c'est bloquer l'exécution de MaFonction aprés l'appel à MonActiveX.FaitQuelqueChose(toto); Ensuite, je peux savoir quand l'exécution de MonActiveX.FaitQuelqueChose(toto); est terminée et faire passer un booléen à true par exemple.

    Il me faudrait donc quelque chose qui ressemblerais à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(!flag) //flag sera affecté à true lorsque l'exécution de MonActiveX.FaitQuelqueChose(toto); est terminée
    {
       wait(50);
    }
    Cependant, j'ai plusieurs soucis:
    1/ Comment faire cela en javascript?
    2/ Je ne voudrais pas que cela prenne trop de ressources.
    3/ Il faut que ce soit absolument "safe". Par exemple, s'il y a un soucis dans l'exécution de MonActiveX.FaitQuelqueChose(toto); et que flag n'est pas affecté à True, il ne faut pas que ça boucle indéfiniment.

    Voilà, j'espère avoir été clair (je suis absolument nul en javascript).
    Merci pour vos propositions

    r0d.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    regarde du coté de setInterval ...
    tu testes ton flag à intervalles régulier ...
    avec éventuellement un incrément qui fixe un maximums d'itérations qui te permettra de sortir du test si il n'y a pas de retour ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 287
    Billets dans le blog
    2
    Par défaut
    Merci SpaceFrog,

    Mais c'est le même problème qu'avec setTimeout, à savoir que l'exécution n'est pas stoppée.

    Prenons un exemple concret:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function MaFonction()
    {
       MonActiveX.Fonction1();
       Fonction2();
    }
    Je voudrais que Fonction2() ne soit pas exécutée tant que MonActiveX.Fonction1() n'a pas terminé sont exécution. Car - je ne sais pas si c'est dû au fait que c'est un activeX - pour l'instant, ce n'est pas le cas.

    Donc si je fais quelque chose du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function MaFonction()
    {
       MonActiveX.Fonction1();
       setInterval(...);
       Fonction2();
    }
    je peux mettre ce que je veux comme papramètres à setInterval, Fonction2() sera appelée sans attendre la fin de l'exécution de MonActiveX.Fonction1(); ni de setInterval();

    N'y a-t-il pas un équivalent à wait() ou sleep() en javascript?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    tu veux ne lancer la focntion2 que si le flag est modifié ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 287
    Billets dans le blog
    2
    Par défaut
    Oui. Enfin, c'était une façon de dire que je veux vraiment stopper l'exécution du script. En réalité, c'est un peu plus compliqué que ça: je suis dans un cadre bien particulier (SDK Activity, pour faire une sorte de plug-in pour Windows Live Messenger).
    Donc en fait, MaFonction est, en fait, un événement de cette SDK et lorsque l'exécution de cette fonction est terminé, d'autres événements vont être automatiquement déclanchés, et je n'ai aucun contrôle la-dessus. C'est pourquoi je voudrais simplement "bloquer" l'exécution.

    Donc au final, je me rend compte que je me suis compliqué pour rien: ma question serait simplement "comment bloquer l'exécution (équivalent d'un wait ou d'un sleep) en javascript"?


  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    bloquer l'execution n'est pas possible ... enfin pas directement du fait du déroulement en bulle des instructions, au mieux il faut faire une sorte de routeur sur la base d'une fonction avec un setInterval pour tester un flag

    une psite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script type='text/javascript'>
    var launch
    function one(){launch= setInterval(function(){document.body.innerHTML+=('coucou \<\/br\>')},500)}
     
    function two(){ clearInterval(launch) ; window.one=null}
     
    </script>
    </head>
     
    <body >
     
    <input type='button' onclick="one()" value='go' />
    <input type='button' onclick="two()" value='kill' />
    </body>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 287
    Billets dans le blog
    2
    Par défaut
    Merci pour ton aide

    Mais d'après ce que tu dis, j'ai l'impression que je ne peux pas faire ce que je voudrais faire

  8. #8
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Oui, en effet...
    Enfin, si, tu pourrais le faire, mais vu la nature du JS, tu bloquerais ta page le temps de l'opération, et si le temps d'execution dépasse la 10aines de seccondes, FF ne sera pas content...

    Sinon, voici la solution dans le cas d'un traitement rapide de la part de l'Active X :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    one = function() {
       ActiveX.asyncFunction();
       while (ActiveX.flag==unterminatedFlag) {}
       two();
    }
    two = function() {
    }

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 287
    Billets dans le blog
    2
    Par défaut
    Merci pour la proposition, FremyCompany. Mais malheureusement, le traitement de l'activeX est loin d'être court... pour être franc, il peut monter jusqu'à 30 voire 40 secondes ^^ (il y a des appels à des seveurs distants et tout un tas de choses qui prennent beaucoup de temps).

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (ActiveX.flag==unterminatedFlag) {}
    risque de ralentir sérieusement la bête ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Citation Envoyé par r0d
    Merci pour la proposition, FremyCompany. Mais malheureusement, le traitement de l'activeX est loin d'être court... pour être franc, il peut monter jusqu'à 30 voire 40 secondes ^^ (il y a des appels à des seveurs distants et tout un tas de choses qui prennent beaucoup de temps).
    Alors c'est loin d'être une bonne idée d'essayer

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    a tout hasard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var running=setInterval(function(){if(ActiveX.flag!=unterminatedFlag){clearInterval(running);return false;},1000)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    1/ Comment faire cela en javascript?
    2/ Je ne voudrais pas que cela prenne trop de ressources.
    3/ Il faut que ce soit absolument "safe". Par exemple, s'il y a un soucis dans l'exécution de MonActiveX.FaitQuelqueChose(toto); et que flag n'est pas affecté à True, il ne faut pas que ça boucle indéfiniment.
    sans garantie aucune
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    var chrono1, chrono2, flag =false;
    function executeActiveX()
    {
      chrono1 = setTimeout("tempsEcoule()","60*10000"); //1 minute max
      chrono2 = setInterval("testFlag()","1000");
     
      flag = ActiveX.fonction();
    }
     
    function testFlag()
    {
      if (flag)
      {
       clearTimeout(chrono1);
       clearInterval(chrono2);
      }
    }
     
     
    function tempsEcoule() //au dela d'une minute on arrete
    {
      flag = true;
      clearInterval(chrono2);
    }

Discussions similaires

  1. Comment arrêter l'exécution d'un script ?
    Par [ZiP] dans le forum Général Python
    Réponses: 10
    Dernier message: 08/11/2011, 20h00
  2. comment interrompre une exécution
    Par benooo dans le forum Interfaces Graphiques
    Réponses: 15
    Dernier message: 16/06/2011, 20h15
  3. [EasyPHP] Comment programmer l'exécution d'un script php ?
    Par onlytime dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 29/03/2008, 19h56
  4. Réponses: 6
    Dernier message: 12/12/2006, 01h30
  5. [Système] Interrompre l'exécution d'un script..
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2006, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo