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 :

Thread avec un programme


Sujet :

C#

  1. #1
    Exo
    Exo est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Thread avec un programme
    Hello tous le monde,

    Je bloque au niveau des threads.

    D'apres un fichier avec des logs, j'aimerais lancé X fois un pogramme.

    Je lis donc mon fichier et pour chaque ligne le lance ma fonction Log.

    StreamReader reader = new StreamReader(FILE);
    string line = reader.ReadLine();
    int count = 0;
    int i=0;
    while (line != null)
    {
    Console.WriteLine(line);
    Log(line);
    line = reader.ReadLine();
    count++;
    i++;
    }
    reader.Close( );

    Est il possible de lancer par example 6 fois ceci?
    Merci de votre aide

  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
    Il est tout a fait possible de lancer plusieurs fois le meme traitement de facon parallele...
    Mais avant tout il y a des notions et des contraintes à respecter si tu ne tient pas a avoir des problemes assez gênants.

    Je ne sais pas quel est ton niveau en terme de synchronisation de processus ou threads.
    Quoi qu'il en soit voici quelques règles à respecter sinon ba les exceptions vont fuser, et les boucles infinies aussi :

    - Les fichiers:
    Lorsqu'un fichier est ouvert en lecture, selon le partage, il est ou pas possible de l'ouvrir en lecture depuis un autre process (partagé ou exclusif), mais il est IMPOSSIBLE de l'ouvrire en écriture depuis un autre processus.
    Lorsqu'un fichier est ouvert en écriture, il n'y a pas de partage. Il est obligatoirement ouvert en mode EXCLUSIF, ce qui signifie qu'aucun autre processus ne peut l'ouvrir dans quelque mode que ce soit.
    Attention: L'ouverture d'un fichier déjà ouvert par un autre processus, ne bloque pas le thread en cours, mais lève une exception...
    - Il ne faut SURTOUT PAS utiliser d'"Attente Active" pour endormir un thread en attendant un résultat ou une ressource.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (ressource != libre) {}
    l'attente active va provoquer des ralentissements et des lenteurs inutiles, sur tous les autres thread du processus. Il faut endormir le thread autrement (en utilisant des synchronisation comme lock (m_Locker) { ton code une fois la ressource libre } qui endorment EFFECTIVEMENT un thread dans l'ordonnanceur.
    Donc une boucle du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    bool ok = false;
    StreamReader reader = null;
    while (!ok) 
    try {
      reader = new StreamReader(FILE);
    ok = true;
    } catch { ok = false; }
    /// le reste de ton code une fois le fichier réellement ouvert
    est à BANNIR !

    Je te conseil de lire le fichier d'abord, de tout stocker en mémoire dans une file.
    puis de synchroniser les threads sur leur accès à la file (pour y lire une ou un lot de valeurs)

    Si toutefois chaque thread lit et traite un fichier séparé, cela ne pose pas de problème dans la synchronisation, et ton code peut etre utilisé comme corps de chaque threads.

    Compte tenu du fait que tu souhaite allouer entre 5 et 6 threads, je te suggère d'utiliser les threads de la pool pour exécuter ces opérations, plutot que les créer toi meme.
    Le fait d'utiliser les threads de la pool est plus rapide car ceux si sont déjà créés et initialisés, ils attendent juste qu'on leur confie un job.
    System.Threading.ThreadPool est ton ami

  3. #3
    Exo
    Exo est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Super merci, je regardais justement dans cette voix!

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

Discussions similaires

  1. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27
  2. Réponses: 11
    Dernier message: 14/02/2006, 00h26
  3. Réponses: 5
    Dernier message: 21/11/2004, 18h59
  4. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15
  5. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01

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