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 :

mutex et accès


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 25
    Par défaut mutex et accès
    bonjour,

    J'ai une variable de classe (statique) dont je veut me servir pour peupler une combox box. Dans l'objet père (A) je ne fait que des get.
    Seulement je remplie cette variable (un list<>) avec un thread (B).

    De base j'ai forcement des erreurs car la variable est modifié pendant que A essaye de la lire par (B).
    Pour remplir ma liste j'utilise des évènement qui remonte du thread juste qu'à A (c'est la seule facon que j'ai trouvé de lié mon thread à ma liste) et j'utilise un fonction de A pour les sets.

    J'ai pensé a utiliser un mutex dans A autour des get; set; de la liste mais cela me reourne inévitablement l'erreur :
    La méthode de synchronisation de l'objet a été appelée à partir d'un bloc de code non synchronisé.
    lorsque je tente de realese le mutex après mes sets.

    Les obtention de passage et les release se font toutes dans l'objet A, mais je doute que cela change grand chose.

    Je vous mes les morceaux de codes impliqués si cela peut vous aider.

    Dans l'objet A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
            public static List<String> DataListToLog = new List<string>();
            private Mutex mutexDataList = new Mutex(false, "MutexDataList");
     
    public void update()
            {
                try
                {
                    mutexDataList.WaitOne(10);
     
                    foreach (string s in DataListToLog)
                    {
                        if (s[0] == 52)
                        {
                            DataOutBox.Items.Add(s.Substring(1));
                        }
                    }
                }
                catch (Exception e)
                {
                }
                finally
                {
                    mutexDataList.ReleaseMutex();
                }
                DataOutBox.Update();
            }
     
    public void AddDataToLog(string data)
            {
                try
                {
                    mutexDataList.WaitOne(10);
     
                    DataListToLog.Add(data);
                }
                catch (Exception e)
                {
                }
                finally
                {
                    mutexDataList.ReleaseMutex(); //l'exception est catch ici
                }
            }
    Dans le thread B: :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void FTDIWriteThread()
            {
                while (true)
                {
                    string TrameOut = "4 Hello Wolrd";
                    WriteOnFTDI(TrameOut);
                    onLogDataIn(TrameOut); // cet évènement va remonter jusqu'à AddDataToLog(..);
                }
            }
    update(); est appelé par le thread principal, ou plutot un objet qui me sert de boucle de traitement. le thread B est un objet d'un objet qui appartient à cette boucle.
    En éspérant avoir été suffisament limpide dans mes explications.

    Un petit coup de main sil vous plait ! ^^

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 25
    Par défaut
    J'ai trouvé une solution en utilisant les Monitor plutôt que des mutex.
    Je ne comprends pas bien pourquoi j'avais un problème avec les mutex mais bon, un monitor sur ma liste a résolu le problème.

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

Discussions similaires

  1. [MT] Galère avec thread et mutex pour accès variable
    Par wadcyr8_197 dans le forum Threads & Processus
    Réponses: 36
    Dernier message: 26/07/2007, 14h45
  2. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 15h14
  3. Exécution indivisible (accès conccurent)
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 23/07/2002, 08h09
  4. Multi-acces a la BD Paradox
    Par _Rico_ dans le forum Paradox
    Réponses: 3
    Dernier message: 22/07/2002, 15h33
  5. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39

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