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 :

cherche la Bonne Pratique pour le Multithreading


Sujet :

C#

  1. #1
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut cherche la Bonne Pratique pour le Multithreading
    Bonjour,

    je présente mon cas

    .Net 2
    voila j'ai deux thread ,appellent les T1 et T2
    et un ressource R1(qui est un tableau des objet (d'une classe qui j'ai définie moi même ))

    T1 :
    il tourne a l’infini pour récupère l'usage de mon CPU
    T1 Mis à jour la Ressource R1 avec les nouveaux données.

    T2 : récupère les données pour faire une autre traitement.


    je lance T1 le premier en suite T2 après t=20 s .

    le problème est dans ce temps , je m'explique.

    a chaque période de T1 j'ai les données (les nouveaux données ) en R1.
    le période de T1 n'est pas un temps fixe car la récupération des CPUusage repose sur une calcule qui aussi dépend des nbre des processus en CPU ainsi que la frequence CPU . ce qui vous dire que le temps que doit attendre T2 pour récupère les bonnes données n'est pas fixe.

    j'ai pas encore trouve une solution !!???

  2. #2
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Tu peut regarder du coté des ManuelResetEvent et AutoResetEvent qui permette la synchronisation entre les threads.

    Y'a beaucoup de possibilités pour synchroniser des threads, je te conseille un site qui explique tout ça en détail : http://www.albahari.com/threading/pa...t_Wait_Handles

  3. #3
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Rebonjour,

    bonne idée je v voir ça.

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour,

    j'ai implémente ton idée dans mon code mais ....

    je présente le contexte

    - la classe qui sert a calcule les usages de CPU est instancie une fois (seulement une fois ).
    -dans le constructeur de ce dernier j'ai donne comme paramètre SyncEvent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ManualResetEvent SyncEvent = new ManualResetEvent(false);
    et j'ai met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     WaitHandle.WaitAll(SyncEventCollecion);
    (SyncEventCollecion contient en faite un seul ManualResetEvent qui 'est SyncEvent ) dans la fonction de traitement de mon deuxième Thread T2.

    pour la premier période le SynEvent n'est en son mode déclenché (je n'est pas trouve le mot exact) mais pour les autres périodes ce ManualResetEvent est deja declenché c'est que fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WaitHandle.WaitAll(SyncEventCollecion);
    n'a pas d' effet .

  5. #5
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour,

    j'ai trouve une solution qui m’arrange voila dans mon thread T1

    j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SyncEvent.Set();
    Thread.Sleep(5000);
    SyncEvent.Reset();
    j'ai donne 5s a T2 pour démarrer son traitement ,et mettre le SyncEvent a son état non signalé .

    vous trouvez que cette pratique a des Problèmes ???

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    le sleep pourrait etre moyen, étant arbitraire ; laisser une place au hasard est toujours un risque, sur un pc bien virussé tout est ralenti par exemple ...

    m'enfin j'ai pas trop compris la problématique de départ
    si le but c'est de faire le traitement de t2 toujours après le traitement de t1, alors un seul thread suffit, et faire les 2 traitements à la suite

    si le but c'est que pendant que t2 fait son traitement il faut repréparer des données en meme temps depuis t1, il y a aussi des solutions
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour ;

    j'avoue que j'ai choisi la mauvaise méthode
    je vu essaie de faire le traitement en un seul thread.
    comme ça j’évite les problèmes ...


    Merci Jerede , Pol63

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

Discussions similaires

  1. Bonne pratique pour inclure source de projet open source ?
    Par joseph_p dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 05/07/2007, 21h51
  2. Réponses: 5
    Dernier message: 12/09/2006, 18h06
  3. Tutoriel SEO : Introduction et bonnes pratiques pour l'optimisation de pages Web
    Par Community Management dans le forum Référencement
    Réponses: 0
    Dernier message: 06/07/2006, 00h03

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