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 :

Deux queues, une référence


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut Deux queues, une référence
    Salut,

    Je suis confronté à un problème que je ne sais pas encore comment résoudre et j'ai besoin de vos lumières

    Alors voilà, j'ai une application qui possède deux files d'attente (des queues). Et j'ai besoin de prendre un élément tantôt dans l'une tantôt dans l'autre en fonction de leur état.

    Par exemple si la file d'attente n°1 contient quelque chose, je prends dans celle là, sinon je prends dans la file d'attente n°2. En fait la 1 est prioritaire sur la 2.

    Et quand j'ai besoin de prendre quelque chose dans la file d'attente, je dis "je veux le premier élément de la file d'attente active".

    En C par exemple on fait ça avec un pointeur qui pointe tantôt sur la file d'attente n°1 tantôt sur la file d'attente n°2, et on prend dans la file d'attente pointée.

    Mais comment fait-on ça en C# ? Avez-vous des pistes à me donner ?

    ++

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par SesechXP Voir le message
    Salut,

    Je suis confronté à un problème que je ne sais pas encore comment résoudre et j'ai besoin de vos lumières

    Alors voilà, j'ai une application qui possède deux files d'attente (des queues). Et j'ai besoin de prendre un élément tantôt dans l'une tantôt dans l'autre en fonction de leur état.

    Par exemple si la file d'attente n°1 contient quelque chose, je prends dans celle là, sinon je prends dans la file d'attente n°2. En fait la 1 est prioritaire sur la 2.

    Et quand j'ai besoin de prendre quelque chose dans la file d'attente, je dis "je veux le premier élément de la file d'attente active".

    En C par exemple on fait ça avec un pointeur qui pointe tantôt sur la file d'attente n°1 tantôt sur la file d'attente n°2, et on prend dans la file d'attente pointée.

    Mais comment fait-on ça en C# ? Avez-vous des pistes à me donner ?

    ++
    C'est pareil. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Queue DonneMoiLaBonne(Queue q1, Queue q2)
    {
       if (...) return q1;
       else (...) return q2;
    }
     
    void Main()
    {
       Queue qUn = new Queue();
       Queue qDeux = new Queue();
     
       Queue qATraiter = DonneMoiLaBonne(qUn, qDeux); // tu as forcément qATraiter == qUn ou qATraiter == qDeux
       TonTraitement(qATraiter); // un pop, probablement
    }
    Il faut juste t'assurer que ta fonction de choix renvoie toujours l'un des deux éléments qui lui sont filés en paramètres.
    Ce n'est pas propre à c#, d'ailleurs, en c++ ou en java, ça serait à peu près pareil, à quelques esperluettes près

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    J'ai oublié de préciser, ce sont des Queues génériques de System.Collections.Generic donc "typées". Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Queue<String> queueString = new Queue<String>();
    Queue<Byte> queueByte = new Queue<Byte>();
    Donc l'exemple ne fonctionne plus

    ++

  4. #4
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    "je veux le premier élément de la file d'attente active".
    Est une demande impossible à satisfaire si tu ne peux considerer tes elements comme étant du meme type.

    Je te conseille de faire une interface IInfo; et Queue<IInfo> pour tes deux listes. Ensuite, IInfo contient deux methodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Byte getByte() ;
    String getString();
    ou qui te renvoie soit le byte unique soit le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stringARenvoyer.getBytes();

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par SesechXP Voir le message
    J'ai oublié de préciser, ce sont des Queues génériques de System.Collections.Generic donc "typées". Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Queue<String> queueString = new Queue<String>();
    Queue<Byte> queueByte = new Queue<Byte>();
    Donc l'exemple ne fonctionne plus

    ++
    En fait, ça dépend de ce que tu veux faire des éléments dépilés. Si c'est pour en faire un ToString(), par exemple, qui est une méthode de Object dont tout dérive, tu peux faire une fonction MegaPop(q1, q2) qui renvoie un object (en dépilant la bonne queue).
    Par contre, si tes traitements sont différents en fonction du type, tu peux faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Traitement(Queue<string> qString, Queue<byte> qByte)
    {
    if (machin) TraitementString(qString); // fonction adaptée aux strings
    else TraitementByte(qByte); // fn adaptée aux bytes
    }
    La méthode de hed62 est bien aussi, même si elle oblige à changer la nature des queues et peut être lourde à mon avis.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Par défaut
    Merci à vous pour votre aide

    Citation Envoyé par Guulh Voir le message
    Par contre, si tes traitements sont différents en fonction du type, tu peux faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Traitement(Queue<string> qString, Queue<byte> qByte)
    {
    if (machin) TraitementString(qString); // fonction adaptée aux strings
    else TraitementByte(qByte); // fn adaptée aux bytes
    }
    En effet, le traitement est différent selon le type de queue...

    Citation Envoyé par Guulh Voir le message
    La méthode de hed62 est bien aussi, même si elle oblige à changer la nature des queues et peut être lourde à mon avis.
    Je peux encore changer le type de Queue, mais avec une Queue de System.Collections je suis obligé de transtyper l'élément en sortie. Donc j'aimerais éviter autant que possible.

Discussions similaires

  1. [XL-2007] Liaison entre deux champs par une référence
    Par gdhia dans le forum Excel
    Réponses: 1
    Dernier message: 27/11/2012, 13h06
  2. [VBA] Ajouter dynamiquement une référence
    Par jpharand dans le forum VBA Access
    Réponses: 23
    Dernier message: 16/04/2010, 23h28
  3. connexion de deux pc à une connexion ADSL
    Par nihal dans le forum Développement
    Réponses: 5
    Dernier message: 30/07/2004, 23h11
  4. Une référence à un élément de sa propre table
    Par szdavid dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/06/2004, 10h46

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