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

Framework .NET Discussion :

[c++ managed] ManualResetEvent


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut [c++ managed] ManualResetEvent
    Bonjour.

    J'ai un comportement bizarre avec "System::Threading::ManualResetEvent".

    Celui-ci est sensé bloquer un thread avec "WaitOne()" et le débloquer avec "Set()".

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    using namespace System;
    using namespace System::Threading;
     
    //bool bEventFoireux = false;
     
    ref class ThreadWithState{
     
      public:
     
        ThreadWithState(ManualResetEvent^% ResetEvent, int iWait) : m_ResetEvent(ResetEvent), m_iWait(iWait), bEventFoireux(false){}
        ~ThreadWithState(){}
        void ThreadProc();
     
      private:
     
        ManualResetEvent^ m_ResetEvent;
        int m_iWait;
        bool bEventFoireux;
    };
     
    void ThreadWithState::ThreadProc(){
     
      //static bool bEventFoireux = false;
     
      m_ResetEvent->WaitOne();
     
      if(bEventFoireux)
        Console::WriteLine("La prog DotNet c'est foireux !");
     
      bEventFoireux = true;
     
      int iRes = 0;
     
      System::Threading::Thread::Sleep(m_iWait);
     
      for(int i = 0; i < 5000; i++)
        iRes += i;
     
      bEventFoireux = false;
      m_ResetEvent->Set();
    }
     
    [STAThreadAttribute]
    int main(array<System::String ^> ^args){
     
      ManualResetEvent^ ResetEvent = gcnew ManualResetEvent(true);
     
      int iVal = 0;// modifier cette valeur avec 1, 10, 100, 1452 par exemple
     
      ThreadWithState^ tws = gcnew ThreadWithState(ResetEvent, iVal);
     
      ThreadStart^ myThreadDelegate = gcnew ThreadStart(tws, &ThreadWithState::ThreadProc);
     
      array< Thread^>^ myThreadArray = gcnew array< Thread^>(11);
     
      for(int i = 0; i < 11; i++){
     
        Thread^ myThread  = gcnew Thread(myThreadDelegate);
        myThreadArray[i] = myThread;
      }
     
      for(int i = 0; i < 11; i++){
     
        myThreadArray[i]->Start();
      }
     
      for(int i = 0; i < 11; i++){
     
        myThreadArray[i]->Join();
      }
     
      Console::WriteLine("FIN");
     
      return 0;
    }
    Le message non désiré "La prog DotNet c'est foireux !" apparaît selon le Sleep.

    Est-ce que c'est moi qui suit foireux ou ManualResetEvent.

    J'utilise le framework 2.0.

    Merci de m'aider à comprendre.

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Pour l'instant j'utilise "MethodImplAttribute".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [MethodImplAttribute(MethodImplOptions::Synchronized)] 
    void ThreadProc();

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/02/2004, 17h53
  2. Problème Window manager sous Slackware 9.1
    Par Riko dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 30/01/2004, 07h38
  3. Problème dans analisys Manager
    Par ien_ien23 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 11/07/2003, 14h38
  4. traduction du terme "managed"
    Par sarasvati dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 14/05/2003, 23h01
  5. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 16h01

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