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 :

Différence entre Timer et thread ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut Différence entre Timer et thread ?
    Bonjour,

    J'utilise un Timer pour actualiser des infos provenant de mon hardware. L'intervalle est toutes les 3 secondes.
    Le problème est que toutes les 3 secondes, quand il interroge le hardware, la fenêtre se freeze le temps de récupérer les infos, genre 500ms.
    Ces problèmes de lenteur sont embêtantes.
    Pourrais-je à la place utiliser un thread à part qui se lancerait toute les 3 secondes et qui ne freezerait pas ma fenetre ?
    Si oui comment ?
    Mais, le "tick" du timer ne créer pas déjà un thread à part ?

    Merci de m'éclairer sur la différence entre les deux, et quel serait le mieux niveau performance pour mon souci.

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    c normal que votre fenettre se friiizzz puisque le Timer utilise le thread principale de votre application ce lui qui cree et met a jour l'interface de ton application.

    la solution que je te conseil de faire est utilise le backgroundworker avec bien sur votre Timer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //double click sur le backgroundworker 
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
       ///ton code pour actualiser des infos provenant de mon hardware
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void timer1_Tick(object sender, EventArgs e)
            {
               backgroundWorker1.RunWorkerAsync();
            }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    Merci pour ton aide.
    Mais à vue d'œil quand le timer va appeler le backgroundworker, il va attendre la fin du backgroundworker non ? Donc freezer ?

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Mais à vue d'œil quand le timer va appeler le backgroundworker, il va attendre la fin du backgroundworker non ? Donc freezer ?
    la fonction RunWorkerAsync() lance le backgroundworker en mode asynchrone .alors en thread parallèle que le thread Princopale
    donc pas de freezer de form(thread principale).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    ok, je vais tenter.

    Sinon, est-ce qu'un thread avec un sleep() à l'intérieur ferait bien le boulot ??

  6. #6
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    oui si tu le fait sleeping pendent le 3s mais a condition que tu doit le faire maintenir meme apres la fin de son traitement soit avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //dans la conception de form
     backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.RelancemonThread);
    //dans ta form 
    private void RelancemonThread(object sender, RunWorkerCompletedEventArgs  e)
            {
                backgroundWorker1.RunWorkerAsync();
     
            }

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

Discussions similaires

  1. [Thread] différence entre les méthodes start/run
    Par maetalkrio dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/10/2009, 17h06
  2. Différence entre un thread et un backgroundworker
    Par istace.emmanuel dans le forum C#
    Réponses: 2
    Dernier message: 17/10/2009, 09h32
  3. Différence entre Thread et ThreadLocal
    Par fantomasmusic dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 27/10/2008, 14h31
  4. Réponses: 5
    Dernier message: 14/08/2008, 11h25
  5. Différence entre process et thread
    Par Mastero dans le forum MFC
    Réponses: 6
    Dernier message: 19/07/2005, 13h52

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