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 :

Question sur les thread


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Par défaut Question sur les thread
    Bonjour, j'ai du mal à comprendre pourquoi ces deux codes, à priori semblables, ont un comportement différent.

    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
    using System;
    using System.Threading;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static private void MaMethode()
            {
                int counter = 0;
                while (true)
                {
                    Thread.Sleep(1000);
                    counter++;
                    Console.WriteLine(counter.ToString());
                }
            }
            static void Main(String[] args)
            {
                Thread MaTache = new Thread(new ThreadStart(MaMethode));
                MaTache.IsBackground = true;
                MaTache.Start();
                Thread.Sleep(2500);
     
            }
        }
    }
    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
    28
    29
    30
    31
    32
    33
    34
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            private void MaMethode()
            {
                int counter = 0;
                while (true)
                {
                    Thread.Sleep(1000);
                    counter++;
                    label1.Text = counter.ToString();
                }
            }
            public Form1()
            {
                InitializeComponent();
                Thread MaTache = new Thread(new ThreadStart(MaMethode));
                MaTache.IsBackground = true;
                MaTache.Start();
                Thread.Sleep(2500);
            }
        }
    }
    Dans le premier cas la sortie Console est:
    1
    2

    Dans le second cas le label du form qui affiche le compteur continue de s'incrémenter à l'infini.

    Merci pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Tout simplement parce que le premier est une application console, après 2.5 seconde, (Sleep(2500) ) le programme s'arrete

  3. #3
    Membre confirmé Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Par défaut
    Pourtant si on enlève le:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaTache.IsBackground = true;
    Cela reste une application console mais le programme ne s'arrête pas.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Venant de MSDN :

    Un thread est soit un thread d'arrière-plan, soit un thread de premier plan. Les threads d'arrière-plan sont identiques aux threads de premier plan, sauf qu'ils n'empêchent pas un processus de s'arrêter. Une fois que tous les threads de premier plan appartenant à un processus sont terminés, le Common Language Runtime met fin au processus. Tous les threads d'arrière-plan restants sont arrêtés et ne se terminent pas.

  5. #5
    Membre confirmé Avatar de Miyukaze
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 66
    Par défaut
    Ah merci beaucoup, j'avais du mal avec les notions de background thread et foreground thread justement, tout s'éclaire
    Juste dernière petite question, par défaut un thread est un foreground thread je présume?

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Je dirais en foreground, suffit de pas initilaiser IsBackground pour voir le comportement par défaut

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

Discussions similaires

  1. Question sur les threads
    Par thebloodyman dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 22/01/2007, 07h28
  2. Questions sur les threads: généralités
    Par Gragra dans le forum C++
    Réponses: 9
    Dernier message: 04/11/2006, 16h28
  3. Quelques questions sur les threads
    Par benj63 dans le forum C++Builder
    Réponses: 28
    Dernier message: 21/11/2005, 13h27
  4. Question sur les threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 21/10/2005, 09h08
  5. Question sur les threads
    Par nicolas66 dans le forum MFC
    Réponses: 4
    Dernier message: 03/06/2005, 20h57

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