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

C# Discussion :

[Timer] System.Timers.Timer thread se chevauchent !


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut [Timer] System.Timers.Timer thread se chevauchent !
    bjr,

    j'ai un souci avec System.Timers.Timer, quand je me un timer cours, et que je debugg, j'appel plusieur fois mon ElapsedEventHandler...

    alors que mon besoin c est de:
    -avoir une minuterie qui appel une fonction, mais qu'une seul fois !


    voila le code :
    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
     
                private static void StartScheduleTask()
                {
                    m_Timer = new System.Timers.Timer(ProcedureSleep());
                    m_Timer.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
                    m_Timer.AutoReset = true;
                    m_Timer.Start();
     
                }
     
     
     
                static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
                {
                        m_Timer.Dispose();
                        m_Timer.Stop();
                        m_Timer = null;
     
     
     
    .....
     
                        StartScheduleTask();
    }

    en fait le timer se rappel sans arret, créant un nouveau timer...

    le probleme c est que si mon timer et bas (1seconde) et que ma tache dure plus longtemps, je crois que le timer re-execute ma tache... :/, c est pour ca que j'essaye de le detruir imediatement.... mais je crois que le probleme n'est valable quand debug ( car je fais des f11... et je suis plus lent que le system...)

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Ben pour que le Timer ne s'exécute qu'une seule fois, il faut mettre AutoReset à false :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Timer.AutoReset = false;

  3. #3
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    ben essaie d'abord d'enlever "StartScheduleTask();" de ta fonction t_Elapsed.

    tu t'y prends mal à mon avis. explique nous ton but plus clairement et on verra ce qu'on peut faire pour quie tu fasses ça correctement.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    Merci a vous deux


    alors j'explique:

    - j ai un service qui doit s'executer a la mode d'une planif de tache

    donc je dois réaliser une tache toute les 24H

    voilou...

    donc pour le moment, j'ai un timer qui se lance, qui execute sa tache, et relance a son tour un autre timer.... et ainsi de suite a l'infini

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    y a des trucs bizarres dans ton code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                        m_Timer.Dispose();
                        m_Timer.Stop();
    On ne fait JAMAIS ça : une fois que tu as appelé Dispose sur un objet, tu ne devrais plus l'utiliser : Dispose libère les ressources non-managées de l'objet, donc si l'objet en a besoin, il ne peut plus fonctionner correctement...
    Tu devrais donc faire le Stop avant le Dispose (mais il est probable que Dispose se charge d'arrêter le timer)

    Ensuite, pourquoi détruire et recréer un nouveau Timer à chaque fois ? Et pourquoi mettre AutoReset à true alors que tu ne laisses pas le timer s'exécuter une nouvelle fois ? Tu pourrais utiliser toujours le même timer... Si tu ne veux pas qu'il puisse se déclencher de nouveau pendant le traitement t_Elapsed, mets AutoReset à false, et relance le timer manuellement quand tu as fini le traitement (méthode Start).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    tomlev, merci pour tes explications très clairs ! Je vais les appliquer à la lettre

Discussions similaires

  1. Event tick de timer créé dans un thread
    Par ppphil dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/07/2007, 11h41
  2. Un timer ? Plein de Timer ? un thread de control ?
    Par vincedom dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 12/06/2006, 13h18
  3. erreur d'un timer declaré dans un thread
    Par hak5 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/04/2004, 09h20
  4. [débutant] Timer inférieur à 1ms ? Timer + précis ?
    Par hepar dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/02/2004, 18h42
  5. [][Timer] Créer un Timer sans utiliser le composant
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 01/10/2003, 11h04

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