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 :

[C#] Comment définir et intégrer un TimeOut sur un WaitHandle ?


Sujet :

C#

  1. #1
    Membre régulier Avatar de legillou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 178
    Points : 93
    Points
    93
    Par défaut [C#] Comment définir et intégrer un TimeOut sur un WaitHandle ?
    Bonjour à tous !!

    De retour de vacances je retrouve mes problèmes de codage à croire que j'aime çà

    Je vais essayer de m'expliquer :
    J'ai un thread qui fonctionne avec des évènements (type AutoResetEvent et ManualResetEvent) et j'attend ces évènements avec un le souci que je rencontre c'est que quand un évènement n'arrive pas assez vite, je voudrais effectuer un traitement. Une sorte de TimeOut pour un WaitHandle. J'ai vu qu'il existait une CONSTANTE WaitHandle.TimeOut mais je ne sais pas comment définir la valeur de TimeOut et je ne sais pas comment l'intégrer dans mon code. Donc voila mon code :

    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
     
     while (_answerState == threadState.Run)
    {
        switch (WaitHandle.WaitAny(new WaitHandle[] { _stopEvent,
     _answerReceived }))
        {
            case 0: Console.WriteLine("answer c'est arreté");
               _answerState = threadState.Stop;
               break;
            case 1:
               // On récupère l'instruction à traiter dans la pile
               answer = (string)_answerFIFO.Dequeue();
               answerType = answer.ToCharArray()[1];
               break;
         }
    }
    En espérant avoir été clair dans mes explications et en attente de vos réponses
    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    Tu as une surcharge de la fonction WaitAny qui prend en argument un TimeSpan correspondant au temps max d'attente d'un des évenements. Voir ici.

  3. #3
    Membre régulier Avatar de legillou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 178
    Points : 93
    Points
    93
    Par défaut
    merci pour ta réponse.
    J'ai regardé l'adresse que tu m'as donnée mais je ne comprend pas à quoi sert le exitContext. Aurais-tu des infos au passage?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Je ne maitrise pas trop ces histoires de contexte en .Net, mais en gros tu peux poser des attributs sur tes objets qui vont définir un contexte d'exécution. Par exemple tu as un attribut System.Runtime.Remoting.Contexts.SynchronizationAttribute qui sert à indiquer que tous les appels aux méthodes de ton objets doivent être synchronisés (pas plus d'un thread en même temps dans un même objet) , tu as la un contexte synchronisé.

    J'imagine (attention je ne suis pas sur) que ce exitContext permet de libérer le lock pendant le waitAny afin que d'autres threads puissent l'obtenir, puis a la fin du waitAny tu le reprends. Bref une histoire de ce genre.

    Toujours est-il que si tu n'utilises pas ces attributs de contexte, je pense que peut importe la valeur de exitContext ton code fonctionnera (autant mettre false par défaut, c'est surement le plus prudent).

    Apres une petite recherche, un article qui devrait être intéressant sur ces histoires de contexte : http://msdn.microsoft.com/msdnmag/is...P/default.aspx

  5. #5
    Membre régulier Avatar de legillou
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 178
    Points : 93
    Points
    93
    Par défaut
    merci encore une fois pour vos réponses vraiment rapides
    developpez.com ca change pas c'est toujours une mine d'information !!
    je le conseille a tous ceux que je connais et qui programment, j'en ramène des clients

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/05/2007, 15h58
  2. Comment intégrer des onglets, sur un menu dynamique Javascript
    Par kervano dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 04/04/2007, 13h14
  3. Comment définir un focus sur un champ (ex:login) ?
    Par vandeyy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/01/2007, 11h05
  4. [VB6] Comment gérer un Timeout sur l'api HttpSendRequest
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/06/2006, 10h15
  5. Comment définir un timeout sur une socket PHP ?
    Par N3odyme dans le forum Langage
    Réponses: 7
    Dernier message: 07/05/2006, 23h04

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