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 :

Combinaison de Timer et Thread


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut Combinaison de Timer et Thread
    Je developpe une application qui utilise un timer pour lire dans une base de données s'il y a de nouveaux enregistrements. Sauf que mon traitement dure longtemps. j'aimerai utiliser les threads mais je trouve des difficultés. Voici un bout du code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Thread t = new Thread(new ThreadStart(analyse));
    public void timer1_Tick(object sender, EventArgs e)
            {
                t.Start();
            }
    private static void analyse()
            {
                 //traitement            
            }

  2. #2
    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 : 44
    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
    Par défaut
    qu'est-ce qui te bloque ?
    tu ne donnes pas assez de détails pour qu'on puisse t'aider...

  3. #3
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    Déjà je dirai que de commencer un thread à chaque Tick du timer ne doit pas être une bonne idée.

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu dis au début que tu rencontres des difficultés, mais là c'est plutôt une question de ce qui est mieux en terme de code. Tu rencontres des soucis (problème de compilation, exception, ...) ou pas ?

    Sinon, pour répondre à
    Déjà je dirai que de commencer un thread à chaque Tick du timer ne doit pas être une bonne idée.
    Tu peux très bien imaginer faire ça avec un seul thread et sans timer, c'est certain. Il suffit d'exécuter sur un thread une méthode comme
    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
    private bool _exitThread;
    ...
    private void ThreadMethod()
    {
        _exitThread = false;
        do
        {
            // On fait le traitement
            ...
            // On teste la condition de sortie avant la pause (si elle est longue)
            if (_exitThread) { break; }
            // On met en pause 
            Thread.Sleep(180000);
        }
        while (!_exitThread);
    }
    Les 2 méthodes se valent je pense. L'avantage de le faire comme ci-dessus c'est que tu t'assures de ne jamais déclencher plusieurs fois le traitement. Avec un timer, si le temps de l'opération peut être supérieur au délai du timer tu te retrouves à réexécuter le code si tu ne fais pas attention. Cela peut poser problème, à moins de stopper le timer avant chaque traitement et le redémarrer ensuite. Ce qui revient au code ci-dessus au final.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut
    la solution que j'ai utilisé est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private bool test = true;
    private void timer2_Tick(object sender, EventArgs e)
    {
        if (test == true)
        {
            test = false;
            //Traitement
            test= true;
        }
    }
    Comme ça je risque pas de refaire le traitement si le temps de l'operation est superieur au délai du timer. vu que je ne peux pas lancer 2 ou 3 traitement simultanés, cette solution n'est pas professionnelle.
    La solution de StormimOn revient en même.

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Je ne comprends plus vraiment là. Je croyais que tu devais utiliser un thread puisque ton traitement prend du temps. Mais à priori dans ton code tu n'utilises même pas de thread.

    Pour la solution que j'ai donné, c'était sans utiliser un timer. On lance ThreadMethod dans un thread, et après on laisse tourner sans se préoccuper de rien. Juste la durée du Sleep à configurer en fonction de l'intervalle que l'on veut entre 2 traitements successifs.

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

Discussions similaires

  1. [TJvTimer] Timer JVCL thread
    Par dvarrel dans le forum Composants VCL
    Réponses: 1
    Dernier message: 14/08/2008, 23h35
  2. JavaME : Timer et thread graphique
    Par ®om dans le forum Java ME
    Réponses: 5
    Dernier message: 31/01/2008, 16h31
  3. Actualisation périodique : timer ou thread ?
    Par Shredder dans le forum Langage
    Réponses: 12
    Dernier message: 02/11/2007, 09h52
  4. Un timer ? Plein de Timer ? un thread de control ?
    Par vincedom dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 12/06/2006, 14h18
  5. [MFC] Cherche Timer avec thread
    Par romeo9423 dans le forum MFC
    Réponses: 17
    Dernier message: 09/03/2005, 11h33

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