froggyinfo
Messages postés16Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention31 juillet 2006
-
25 juil. 2006 à 17:36
froggyinfo
Messages postés16Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention31 juillet 2006
-
27 juil. 2006 à 10:30
Bonsoir,
Voila j'ai un problème avec un programme multi-thread,
J'ai raccourci un peu le code est remplacé les fonctions par des recup1 à 4.
Le but du programme :
Le programme doit en fait consulter une base de donnée pour avoir une liste alerte.
Ensuite un certain nombre de thread vont aller taper dans le résultat de l'alerte.
j'utilise alors la classe mutex pour qu'un seul thread puisse accéder à une alerte.
Une fois les informations récupérés ce thread lance lui 4 thread.
Et c'est la que j'ai l'impression que la gestion n'est pas bonne.
Alors soit tout est ok et pour vous il n'y a pas de problèmes.
Ou soit ya un problème et dans ce cas, je veux bien un petit coup de pouce.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Data.SqlClient;
using System.Data;
using System.Reflection;
class Program
{
private static Mutex mut = new Mutex();
private static int nbThread = 3;
private static bool terminer = false;
private const string sqlConnexionStr = "chaine de connexion à la base";
protected SqlDataReader cible;
private int i = 0;
static void Main()
{
Program p = new Program();
p.lanceThread();
Console.ReadLine();
}
public void lanceThread()
{
SqlCommand recupCible = new SqlCommand();
SqlConnection conn = new SqlConnection(sqlConnexionStr);
recupCible.Connection = conn;
conn.Open();
crougni
Messages postés18Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention 3 mars 2009 26 juil. 2006 à 08:37
Salut,
pourquoi exactement tu suppose que ton prog fonctionne pas ? tu as constaté un problème précis ou pas vraiement ?
perso, je vois un truc,
qui pourrait faire que sa croucroute, c'est que tes threads RecupEnvoiMail peuvent modifier ta vairable Read chacun leurs tour sans pour autant avoir lancé les 4 sous-threads. Cad que les Thread 0 [RecupEnvoiMail] , lit la première alerte, positionne Read à Vrai, puis le Thread 1 [RecupEnvoiMail], fait pareil, mais n'arrive pas à lire, car par exemple il n'y a plus d'alerte, et du coup positionne Read à faux, alors que ton thread 0 à pas encore lancé ses sous-thread.
Donc moi je n'utiliserai pas du tout ta variable Read, elle sert à rien, et je lancerai mes sous-thread juste après la lecture.
de plus de remplacerai ton mutex par un bon lock(this)
froggyinfo
Messages postés16Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention31 juillet 2006 26 juil. 2006 à 10:37
De plus à propos du read, il est propre à chaque thread et non commun à tous les threads.
Je ne comprend pas pourquoi ca viendrait de ma variable read.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 26 juil. 2006 à 23:49
Salut,
J'ai simplifié ton code en supprimant tout ce qui était en rapport avec la base donnée.
Et apparement y'a pas de problème, tout semble s'exécuter correctement "en parallèle".
Comment peux-tu affirmer que ce n'est pas le cas.
Ou alors y'a un prob avec la database (je ne peux pas tester ça pour l'instant...)
froggyinfo
Messages postés16Date d'inscriptionvendredi 12 décembre 2003StatutMembreDernière intervention31 juillet 2006 27 juil. 2006 à 10:30
Ok en fait tout s'éxécute bien en parallèle. Je pense que j'ai trouvé le problème. En fait la ou il y a un problème c'est dans les fonctions récup. Dans ces fonctions récup vous vous doutez bien que je ne fais que de mettre en veille des thread heureusement.
En fait dans ces thread j'appelle une fonction d'un web service. Et ce web service lui récupère le contenu html de page. Et en fait, j'ai l'impression qu'il fait les requêtes en série ce web service.
Est ce que vous connaissez un truc pour lancer deux requète différente en meme temps sur un serveur web.