#pragma once #include "gcola.h" #include "lock.h" //cola concurrente para usar con multiples thread template class Cgcola_con : public Cgcola { public: //variables-------------------------------------------------------------------------------- Clock cerrojo;//interlock para protejer la cola int modo;//modo 0 bloqueante, modo 1 no bloqueante //funciones-------------------------------------------------------------------------------- //************************************************************************* Cgcola_con(void) :Cgcola() { modo=0; }; //************************************************************************* virtual ~Cgcola_con(void) { borra(); }; //************************************************************************* //************************************************************************* virtual inline T* operator++()//da puntero al ultimo elemento { T* res=NULL; if (modo) { if(!cerrojo.puedo()) return NULL; } else cerrojo.entro(); res= Cgcola::operator++(); cerrojo.salgo(); return res; }; //************************************************************************* virtual inline T* operator--()//da puntero al primero { T* res=NULL; if (modo) { if(!cerrojo.puedo()) return NULL; } else cerrojo.entro(); res= Cgcola::operator--(); cerrojo.salgo(); return res; }; //************************************************************************* virtual inline BOOL operator+(T &e )//aņade al final { BOOL res=FALSE; if (modo) { if(!cerrojo.puedo()) return FALSE; } else cerrojo.entro(); res= Cgcola::operator+(e); cerrojo.salgo(); return res; }; //************************************************************************* virtual inline BOOL operator-(T &e) //aņade al principio { BOOL res=FALSE; if (modo) { if(!cerrojo.puedo()) return FALSE; } else cerrojo.entro(); res= Cgcola::operator-(e); cerrojo.salgo(); return res; }; //************************************************************************* virtual inline BOOL operator+=(T* e )//da el ultimo y lo elimina { BOOL res=FALSE; if (modo) { if(!cerrojo.puedo()) return FALSE; } else cerrojo.entro(); res= Cgcola::operator+=(e); cerrojo.salgo(); return res; }; //************************************************************************* virtual inline BOOL operator-=(T* e )//da el primero y lo elimina { BOOL res=FALSE; if (modo) { if(!cerrojo.puedo()) return FALSE; } else cerrojo.entro(); res= Cgcola::operator-=(e); cerrojo.salgo(); return res; }; //************************************************************************* };