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

Java Discussion :

Fonction lente : Arrêter puis relancer.


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut Fonction lente : Arrêter puis relancer.
    Bonjour les amis,

    J'ai besoin d'un petit coup de main, en fait j'ai créé une fonction qui fait un calcul selon un paramètre M, cette fonction peu prendre parfois beaucoup de temps pour s'exécuter et ce temps d'exécution peu changer (diminuer ou bien augmenter) si on change le paramètre M. Je voudrais savoir s'il y'a un moyen de lancer la fonction avec un paramètre M (valeur 1 par exemple) et si le temps d’exécution dépasse 30 seconds, arrêter le traitement et le relancer avec M' (valeur 2 par exemple), et même chose, si cela prend plus de 30 secondes arrêter de nouveau puis relancer avec M'' (valeur 3) et ainsi de suite ...

    Merci par avance pour vos réponses.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    Oui tu peux par exemple lancer le traitement dans un thread que tu stoppes dès que ton timeout est terminé. Et tu en relances un autre ...

    Va voir du coté de l'objet Thread.

    Il doit y avoir bien d'autres façon de faire.

  3. #3
    Membre Expert
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut
    Bon j'ai fais plusieurs recherches mais je bloque toujours.

    Pour l'instant voilà ce que j'ai fait.
    J'ai créé deux Thread, le premier lance le calcul ThreadCalculator, le deuxième il lance un compteur qui va compter le nombre de secondes écoulé : ThreadTimer.

    ThreadCalculator : dans son RUN il lance une fonction (que je ne peux pas modifier), il récupère le résultat dans une variable.

    ThreadTimer : dans son RUN il lance une boucle pour une période donnée, cette période je la lui passe par un paramètre NBRSECONDES, si par exemple NBRSECONDES = 5, alors le Thread se lancerea 5 secondes puis va sortir.

    Voilà le problème :
    Dans mon main, je lance les deux Thread successivement, Si ThreadCalculator se términe avant le ThreadTimer alors c'est bon. Mais si le ThreadTimer se términe avant le ThreadCalculator là je galère, car il faut que j'arrête les deux thread, puis que je les relance en changeant un paramètre pour le ThreadCalculator (un paramètre qui permettra de réduite son temps d'execution).

    Quand j'arrête les deux Thread avec STOP ( ce qui est complètement déprécié , si vous avez une autre méthode je suis preneur ) je les relance, et là ça ne marche pas, en me donnant l'excetion suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.IllegalThreadStateException
        at java.lang.Thread.start
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Ne faut il pas que tu les recrées?

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Le mieux dans ce genre de cas, c'est d'utiliser un flag dans la fonction lente qui sera periodiquement verifié. Comme ca, pour l'arreter, il suffit de changer le flag puis d'utiliser un Thread.join(). Ca permet de sortir de maniere plus propre et de liberer les ressources eventuellement utilisées proprement.

    Un truc du genre :
    Code : 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
    26
    27
    Thread t;
    private void startFonctionLente()
    {
       t = new Thread(new Runnable()
       {
          fonctionLente();
       });
    }
     
    private void fonctionLente()
    {
       int i = 0;
       while((stopFlag== false) && (i < 50))
       {
          // Une partie du traitement
          i++;
       }
    }
     
    public void stopFonctionLente()
    {
       stopFlag = true;
       try
       {
          t.join();
       }
    }
    a+

  6. #6
    Membre Expert
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Par défaut
    Oui j'avais pensé à ça, mais comme j'ai dis précedemment je n'ai pas accès au code source de la fonction lente, je ne peux qu'y faire appel, elle fourni dans un jar.
    Pas accès au code source --> pas de flag possible :'(
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/09/2014, 15h16
  2. [WD18] Arrêter er relancer une appli plantée
    Par elfasys dans le forum WinDev
    Réponses: 6
    Dernier message: 20/10/2013, 21h26
  3. [XL-2003] Supprimer des dates en fonction du jour puis effectuer un tri.
    Par graphikris dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 11/02/2013, 19h06
  4. Réponses: 6
    Dernier message: 19/03/2011, 11h13
  5. Faire un pause puis relancer l'animation
    Par sc62290 dans le forum Flash
    Réponses: 3
    Dernier message: 19/10/2009, 14h15

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