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

Framework .NET Discussion :

Au sujet des threads


Sujet :

Framework .NET

  1. #1
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut Au sujet des threads
    Bonjour à tous,

    Voici ce que je fait habituellement (exemple fictif), mais j'aimerais avoir l'avis d'autres développeurs. Je précise que dans la méthode GetFile je n'ai pas la possibilité de remonter des évènement de progression.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Thread thread = new Thread(new ThreadStart(GetFile));
    thread.Start();
     
    while (thread.ThreadState == ThreadState.Running)
    {
        Console.Write(".");
        Thread.Sleep(500);
    }
     
    thread.Join();
    Au niveau du while, est que utiliser thread.IsAlive est plus fiable?

    Merci pour vos retours!

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    Le problème de ThreadState.Running c'est que si tu demande à ton thread de se stopper, mais qu'il n'a "pas encore reçut le message", il est toujours en fonctionnement, mais son ThreadState n'est plus Running mais StopRequested.

    De plus la propriété ThreadState n'est pas une simple énumération mais fonctionne comme un set de valeurs, un ensemble de "drapeaux", et donc si tu met thread.ThreadState == ThreadState.Running, tu risque d'avoir des surprises dans certains cas, car tu peux très bien avoir plusieurs états simultannées et du coup l'égalité sera fausse.

    Si tu tiens à utiliser ThreadState il faut que tu tienne compte de tous les cas de fonctionnement que tu peux rencontrer.
    Sinon isAlive est un bon compromis.

    Ensuite pour GetFile, qu'est ce qui t'empeche d'avoir un retour de progression ?
    Après tout ton while attend sagement en attente SEMI-ACTIVE que l'autre thread finisse. Pourquoi ne pas déléguée et créer un évenement de progression que ton thread lance règulierement, pendant que ton thread principal attend sagement que l'autre finisse avec un Thread.Join(thread) ?

  3. #3
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Merci pour ces précisions!

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

Discussions similaires

  1. question au sujet des threads
    Par Portanoo dans le forum Général Python
    Réponses: 1
    Dernier message: 31/07/2008, 17h29
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Au sujet des mots de passe
    Par FranT dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2002, 22h16
  4. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03
  5. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53

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