billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
26 avril 2007 à 11:47
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 2014
-
27 avril 2007 à 16:08
Bonjour,
Je voulais savoir s'il existait une classe permettant la gestion d'une Queue ayant un buffer max. Je m'explique: je voudrais empiler des messages reçu dans un buffer. Cependant, je ne voudrais pas qu'il dépasse une certaine taille et qu'à partir de cette taille, il détruise automatiquement le message empilé le plux vieux.
Je pense que ce besoin est assez générique et il doit peut-être exister quelque chose sur le framework.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 avril 2007 à 13:49
ah et en framework 2 tu as les Queue<T> dans System.Collection.Generic...
Apres les méthodes enqueue et dequeue sont virtual
enfin cest surtout enqueue qui tinteresse, il te suffira dajouter une propriété genre MaxSize et dovveride enqueue pour faire un truc du genre
public virtual override Enqueue (T Item)
{
if (this.Length == this.MaxSize)
this.Dequeue();
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 avril 2007 à 15:15
a moins que tu ne veuille empêcher un futur héritage, tu devrais laisser rollingqueue virtual
si jamais tu dois passer en framework 2 un jour, renomme capacity car cest une propriété qui existe dans la version generique de la classe
tes constructeurs prenant en paramètre une ICollection ne vérifient pas à la construction que la collection n'est pas supérieure a capacity (auquel cas tu devrais dequeue autant que nécessaire)
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 27 avril 2007 à 13:42
l'objet "Queue" est une fifo générique simple. en héritant de cet objet et en surchargeant les méthodes qui vont bien, tu dois pouvoir créer en 10 minutes montre en main la queue correpondant a ta demande je pense
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 27 avril 2007 à 14:28
Bonjour,
Merci pour ta réponse. J'ai effectivement fait comme tu me le préconisais. Pour ceux que cela intéresse, je poste le (peu) de code que j'ai implémenté pour se faire. Je suis désolé par avance car il s'agit de C++ managé sur le framework 1.1 . La migration vers le C# ne devrait pas vous être difficile. Ca va pas vous faire de mal de voir du C++ un peu ^^
RollingQueue.h :
public __gc class RollingQueue : public Queue
{
public:
//Constructor
RollingQueue();
//Constructor
RollingQueue(ICollection* col);
//Constructor
RollingQueue(int capacity);
//Constructor
RollingQueue(ICollection* col, int capacity);
//Method to set maximum capacity of buffer
__property void set_Capacity(int value) { _capacity = value; }
//Method to get maximum capacity of buffer
__property int get_Capacity() { return _capacity; }
//Method to enqueue data
void Enqueue(Object* item);
private:
int _capacity;
};
//Default capacity for buffer
const int DEFAULT_CAPACITY = 50;