CFPool Class Reference

#include <StreamControl.h>

Inherits CFragmentQueue.

Public Member Functions

 CFPool ()
 CFPool construtor da classe, chamado quando um objeto e criado usando o comando new.
 ~CFPool ()
 ~CFPool destrutor da classe, chamado quando um objeto e removido com o comando delete.
int Insert (FragmentInfo *fip)
 Insert Insere um objeto FragmentInfo no final da fila.
void WaitObject ()
 WaitObject funcao usada para esperar que existam objetos na fila FIFO de um objeto da classe.
FragmentInfoRemove ()
 Remove remove um dos elementos do inicio da fila FIFO de um objeto da classe, se a fila nao estiver vazia e se este objeto possuir creditos.

Private Attributes

pthread_cond_t m_WaitObject
 Variavel de condicao usada pela thread que processa os clientes para esperar pelo evento indicando que a fila FIFO da classe, com objetos FragmentInfo, deixou de ficar vazia.
pthread_mutex_t m_AccessFragmentQueue
 Mutex para garantir o acesso exclusivo a fila FIFO.

Detailed Description

Definition at line 382 of file StreamControl.h.


Constructor & Destructor Documentation

CFPool::CFPool (  ) 

CFPool construtor da classe, chamado quando um objeto e criado usando o comando new.

Definition at line 757 of file StreamControl.cpp.

00758 {
00759     #ifdef RIO_DEBUG1
00760     RioErr << "[CFPool - Construtor] Start" << endl;
00761     #endif
00762 
00763     // Cria a variavel de condicao da classe.
00764     pthread_cond_init( &m_WaitObject, NULL );
00765     // Cria o mutex usado para garantir o acesso exclusivo a fila FIFO.
00766     pthread_mutex_init( &m_AccessFragmentQueue, NULL );
00767 
00768     #ifdef RIO_DEBUG1
00769     RioErr << "[CFPool - Construtor] Finish" << endl;
00770     #endif
00771 }

CFPool::~CFPool (  ) 

~CFPool destrutor da classe, chamado quando um objeto e removido com o comando delete.

Definition at line 774 of file StreamControl.cpp.

00775 {
00776     #ifdef RIO_DEBUG1
00777     RioErr << "[CFPool - Destrutor] Start" << endl;
00778     #endif
00779 
00780     // Remove a variavel de condicao da classe.
00781     pthread_cond_destroy( &m_WaitObject );
00782     // remove o mutex usado para garantir o acesso exclusivo a fila FIFO.
00783     pthread_mutex_destroy( &m_AccessFragmentQueue );
00784 
00785     #ifdef RIO_DEBUG1
00786     RioErr << "[CFPool - Destrutor] Finish" << endl;
00787     #endif
00788 }


Member Function Documentation

int CFPool::Insert ( FragmentInfo fip  )  [virtual]

Insert Insere um objeto FragmentInfo no final da fila.

Se a fila estava vazia antes da insercao do elemento, um sinal sera enviado a thread que foi bloqueada na variavel de condicao m_WaitObject ao executar a funcao Remove dada a seguir, pois agora existem elementos a serem removidos da fila.

Parameters:
fip ponteiro para o objeto a ser inserido no final da fila.
Returns:
S_OK se o objeto foi corretamente inserido na fila, e valor diferente de S_OK se algum erro ocorreu ao inserir o objeto.

Reimplemented from CFragmentQueue.

Definition at line 793 of file StreamControl.cpp.

00794 {
00795     bool SendSignal;
00796     int result;
00797 
00798     #ifdef RIO_DEBUG1
00799     RioErr << "[CFPool - Insert] Start" << endl;
00800     #endif
00801 
00802     // Usa a funcao Insert da classe pai para inserir o objeto FragmentInfo na
00803     // fila FIFO.
00804     // Obtem acesso exclusivo a fila FIFO.
00805     pthread_mutex_lock( &m_AccessFragmentQueue );
00806     SendSignal = IsEmpty();
00807     result = CFragmentQueue::Insert( fip );
00808     #ifdef RIO_DEBUG2
00809     // Imprime a lista obtida apos a insercao do objeto.
00810     CFragmentQueue::PrintFragmentQueue( "Insercao em CFPool" );
00811     #endif
00812     // Se nao ocorreu nenhum erro na insercao, devemos gerar um sinal
00813     // informando que um objeto foi inserido, se o pool estava vazio antes
00814     // da insercao (obs: devemos usar S_OK ao inves de S_OK?) 
00815     if( ( result == S_OK ) && ( SendSignal ) ) 
00816         // Envia um sinal para a variavel de condicao, para desbloquear, se
00817         // necessario, uma thread que esteja esperando pela condicao, que e a
00818         // insercao de um objeto FragmentInfo no pool.
00819         pthread_cond_signal( &m_WaitObject );
00820     // Libera o acesso exclusivo a fila FIFO.
00821     pthread_mutex_unlock( &m_AccessFragmentQueue );
00822 
00823     #ifdef RIO_DEBUG1
00824     RioErr << "[CFPool - Insert] Finish" << endl;
00825     #endif
00826 
00827     return result;
00828 }

FragmentInfo * CFPool::Remove ( void   )  [virtual]

Remove remove um dos elementos do inicio da fila FIFO de um objeto da classe, se a fila nao estiver vazia e se este objeto possuir creditos.

Depois da remocao do elemento do inicio da fila, o numero de creditos da classe sera decrementado em 1 unidade.

Returns:
ponteiro para o elemento do inicio da fila que foi removido, se o objeto possuir creditos e a fila nao estiver vazia, ou NULL em caso contrario (isto e, se a fila estiver vazia ou se o objeto nao possuir creditos).

Reimplemented from CFragmentQueue.

Definition at line 865 of file StreamControl.cpp.

00866 {
00867     FragmentInfo *fip;
00868 
00869     #ifdef RIO_DEBUG1
00870     RioErr << "[CFPool - Remove] Start" << endl;
00871     #endif
00872 
00873     // Usa a funcao Remove da classe pai para tentar remover um objeto
00874     // FragmentInfo da fila FIFO.
00875     // Obtem acesso exclusivo a fila FIFO.
00876     pthread_mutex_lock( &m_AccessFragmentQueue );
00877     fip = CFragmentQueue::Remove();
00878     #ifdef RIO_DEBUG2
00879     // Imprime a lista obtida apos a remocao do objeto.
00880     CFragmentQueue::PrintFragmentQueue( "Remocao em CFPool" );
00881     #endif
00882     // Libera o acesso exclusivo a fila FIFO.
00883     pthread_mutex_unlock( &m_AccessFragmentQueue );
00884 
00885     #ifdef RIO_DEBUG1
00886     RioErr << "[CFPool - Remove] Finish" << endl;
00887     #endif
00888 
00889     return fip;
00890 }

void CFPool::WaitObject (  ) 

WaitObject funcao usada para esperar que existam objetos na fila FIFO de um objeto da classe.

Se a fila nao estiver vazia, a funcao retornara imediatamente o controle a thread que a executou. Porem, caso a fila esteja vazia, a thread que chamou a funcao sera bloqueada na variavel de condicao m_WaitObject, ate que um elemento seja inserido na fila pela funcao Insert.

Definition at line 834 of file StreamControl.cpp.

00835 {
00836     #ifdef RIO_DEBUG1
00837     RioErr << "[CFPool - WaitObject] Start" << endl;
00838     #endif
00839 
00840     // Usa a funcao Remove da classe pai para tentar remover um objeto
00841     // FragmentInfo da fila FIFO.
00842     // Obtem acesso exclusivo a fila FIFO.
00843     pthread_mutex_lock( &m_AccessFragmentQueue );
00844     if( IsEmpty() ) 
00845     {
00846         // Espera na variavel de condicao pela chegada de um objeto 
00847         // FragmentInfo. A thread que chamou Insert sera bloqueada ate que a 
00848         // funcao Insert seja chamada e gere um sinal para a variavel de 
00849         // condicao, o que ira em consequencia desbloquear a thread.
00850         #ifdef RIO_DEBUG2
00851         RioErr << "CFPool::WaitObject esperando por um objeto." << endl;
00852         #endif
00853         pthread_cond_wait( &m_WaitObject, &m_AccessFragmentQueue );
00854     }
00855     // Libera o acesso exclusivo a fila FIFO.
00856     pthread_mutex_unlock( &m_AccessFragmentQueue );
00857 
00858     #ifdef RIO_DEBUG1
00859     RioErr << "[CFPool - WaitObject] Finish" << endl;
00860     #endif
00861 }


Field Documentation

pthread_mutex_t CFPool::m_AccessFragmentQueue [private]

Mutex para garantir o acesso exclusivo a fila FIFO.

Definition at line 391 of file StreamControl.h.

pthread_cond_t CFPool::m_WaitObject [private]

Variavel de condicao usada pela thread que processa os clientes para esperar pelo evento indicando que a fila FIFO da classe, com objetos FragmentInfo, deixou de ficar vazia.

Definition at line 389 of file StreamControl.h.


The documentation for this class was generated from the following files:
Generated on Wed Jul 4 16:03:31 2012 for RIO by  doxygen 1.6.3