Accueil > Forum > > > > Lancer plusieurs Threads à la fois
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
|
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
|
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet [ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS.[ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS. par Patrick Guimonet
C'est un point peu mis en avant mais SharePoint 2013 a été l'occasion de remettre de l'ordre dans les modèles de sites. Tout d'abord, un certain nombre de modèles ont été tout simplement rendus obsolètes (cf. Fonctionnalités déco...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|