begin process at 2013 05 24 00:22:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Algorithme

 > 

Compression, Split et Cryptage

 > 

Lancer plusieurs Threads à la fois


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lancer plusieurs Threads à la fois

mercredi 4 juillet 2012 à 14:00:04 | Lancer plusieurs Threads à la fois

Karibot

Bonjour,
j'essaye de lancer plusieurs threads à la fois et j'ai l'impression que il n'y en as qu'un seul qui part... et donc pas de parallelisme effectif.

un bout de code est beaucoup plus parlant:
Code C# :
private static bool __stop = false;
private static void Main(args[])
{
      Thread[] myThreads = new Thread[5];
      for (int i = 0; i<myThreads.length; {
           Thread myThread = new Thread(new ThreadStart(DoWork));
           myThread.Name = i.ToString();
           myThread.Start();
      }
}
private static void DoWork()
{
      while(!__stop){
            console.WriteLine("current thread : {0}", Thread.CurrentThread.Name);
      }

}


j'ai fait expres de faire une boucle infinie en pensant que tous les threads se lanceront tous d'un coup... sauf que la je n'ai que le premier qui s'affiche à chaque fois. ce qui me fait penser qu'il attend la fin pour lancer le deuxième :(

merci pour votre aide.
mercredi 4 juillet 2012 à 14:20:12 | Re : Lancer plusieurs Threads à la fois

krimog

Administrateur CodeS-SourceS
Dans ton code, i n'augmente jamais. Il crée donc une infinité de threads qui s'appellent "0" et qui font une boucle infinie.
De plus, ton code ne compile pas.

Avec ce code, ça fonctionne :
Code C# :
private static bool __stop = false;
private static void Main(string[] args)
{
    Thread[] myThreads = new Thread[5];
    for (int i = 0; i < myThreads.Length; i++)
    {
        Thread myThread = new Thread(new ThreadStart(DoWork));
        myThread.Name = i.ToString();
        myThread.Start();
    }
}
private static void DoWork()
{
    while (!__stop)
    {
        Console.WriteLine("current thread : {0}", Thread.CurrentThread.Name);
    }
}


Je te conseille également de faire un Thread.Sleep()

Code C# :
private static bool __stop = false;
private static Random rand = new Random();
private static void Main(string[] args)
{
    Thread[] myThreads = new Thread[5];
    for (int i = 0; i < myThreads.Length; i++)
    {
        Thread myThread = new Thread(new ThreadStart(DoWork));
        myThread.Name = i.ToString();
        myThread.Start();
    }
}
private static void DoWork()
{
    while (!__stop)
    {
        Console.WriteLine("current thread : {0}", Thread.CurrentThread.Name);
        Thread.Sleep(rand.Next(5000));
    }
}


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
mercredi 4 juillet 2012 à 14:23:25 | Re : Lancer plusieurs Threads à la fois

Karibot

merci mais c'est bien ce que j'avais, c'est mon copié collé qui n'a pas marché.
mercredi 4 juillet 2012 à 14:26:34 | Re : Lancer plusieurs Threads à la fois

krimog

Administrateur CodeS-SourceS
Bah chez moi ça marche très bien.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
mercredi 4 juillet 2012 à 14:38:30 | Re : Lancer plusieurs Threads à la fois

Karibot

en fait, ça marche bien, sauf que je met une vraie fonction doWork, la pour le coups, ca passe un par un... je n'y comprend rien.
mercredi 4 juillet 2012 à 15:26:32 | Re : Lancer plusieurs Threads à la fois

krimog

Administrateur CodeS-SourceS
Tu es sûr que ce n'est pas parce que ta méthode DoWork se fait tellement vite que tu ne vois pas la parallélisation ?

Pour vérifier, mets un Sleep aléatoire comme montré dans le dernier code que je t'ai envoyé. Tu verras bien si les threads sont en parallère ou à la suite.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
mercredi 4 juillet 2012 à 15:41:49 | Re : Lancer plusieurs Threads à la fois

Karibot

non, comme j'ai un compteur je vois bien que je ne traite pas plusieurs éléments à la fois.

dans mon dowork, je lis une page web et je récupère les liens (donc ca prend un peu de temps sans le sleep.

PS: j'ai essayé avec un sleep(1000), à part ralentir le programme, ça ne le fait pas aller plus vite
mercredi 4 juillet 2012 à 16:06:16 | Re : Lancer plusieurs Threads à la fois

krimog

Administrateur CodeS-SourceS
Non, le but est de faire un sleep aléatoire, afin que ton deuxième thread puisse passer avant ton premier.

Ou, plus simple, tu fais effectivement ton Sleep(1000) UNE fois dans chaque thread. Si tu as 10 threads et que ton programme est ralenti d'une seconde, c'est que les threads étaient en parallèle. Si ton programme est ralenti de 10 secondes, c'est que tes threads ne sont pas exécutés en même temps.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
mercredi 4 juillet 2012 à 16:13:31 | Re : Lancer plusieurs Threads à la fois

Karibot

waw, y a un truc que je ne comprend pas :)

j'ai suivi ton conseille (merci au passage) et ai mis un sleep(1000) apres chaque thread et ca fonctionne !! le programme lance tous les thread et je vois bien la différence à l'écran. si je commente cette ligne, j'ai toujours le meme thread qui tourne (je le vois car mon conteur ne s'incrémente que de 1 à chaque fois). tu peux peut etre m'expliquer car en gros mon sleep accèlere le programme alors qu'il est sensé le ralentir...





lundi 9 juillet 2012 à 10:13:50 | Re : Lancer plusieurs Threads à la fois

madkeyboard

Salut !

Y'a un petit détail qui me chagrine dans ton code :
Tu instancie un tableau de threads (myThreads), puis dans ta boucle for tu crées de nouveaux Thread myThread en laissant en plan ce pauvre tableau tout beau !

Sinon pour l'histoire d'accélérer ton programme à coups de Sleep (dit comme ça, c'est vrai que c'est un peu absurde ^^), ça dépend pas mal ce qu'il y a précisément dans ton DoWork, et de l'endroit où tu as mis ton Sleep, je dirais !
Peut-être que chaque Thread essai d'accéder à un serveur en même temps, ce qui prend pas mal de temps, alors que si tu les fait attendre 1s entre 2 requêtes au serveur, ça laisse du temps aux autres threads pour s'exécuter ???
Ou une bêtise du genre...
Ou je dis que des bêtises ^^

Mad Keyboard


Cette discussion est classée dans : code, lancer, private, thread, threads


Répondre à ce message

Sujets en rapport avec ce message

Thread bancal ? [ par mecyber25 ] Bonjour [code=cs] private lamethode() { //J'écris des résultats dans un fichier texte } private void button1_Click(object sender, EventArgs e telechargement d'image [ par Rapakooti ] Bonjour, Pour mon programme je telecharge des photos depuis une boucle via un thread. [code=cs] Thread t = new Thread(new ParameterizedThreadSta Effectuer un sleep dans un background worker [ par Gaedarr ] Bonjour, Tout est dans le titre. Je recherche à utiliser le Thread.Sleep(); dans mon BGW mais le hic est qu'il m'indique toujours le message suivant Treeview et Thread [ par crocteamgg ] Bonjour/soir, J'essaie dernièrement d'utiliser l'élément treeview de WPF et je rencontre un problème avec son utilisation. Je m'entraîne en récupéra DIGICODE question pratique [ par 76julien ] Bonjour je fais un petit programme personnel appelé DIGICOD Son nom explique tout des boutons de 0 à 9 un bouton OK et un bouton C pour effacer! Le tr Suspendre/Reprendre Thread [ par Leucistic ] Bonjour, J'ai crée un thread qui sert de chronomètre (affiche le temps sur un label).Je souhaiterais pouvoir suspendre/reprendre ce thread selon les a Problème avec la gestion des thread: thread appelé deux fois seulement au lieu de 15 :( [ par AmK ] Bonjour,J'ai un gros problème avec l'utilisation des thread!En fait, ce qui se passe c'est que j'appelle un thread 15fois ! ( 15positions successives Tableau Public [ par Byrong ] Bonsoir voila j'aimerai utiliser un tableau dans différents private void Comment puis je faire pour utiliser ce tableau. [CODE] public String[] Tab Plusieurs threads modifiant un seul contrôle [ par Stex2010 ] Bonjour, J'ai besoin d'exécuter simultanément plusieurs threads qui modifient un contrôle TextBox dans mon application (le journal d'activité de l'ap Deux thread acces à un objet [ par rikoukiki ] Bonjour J'ai crée une classe qui permet de mettre à jours une base de données. L'objet de cette classe est lancé dans un thread séparé ou par des mét


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,590 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales