?? cfifo.h
字號:
/*******************************************************************
* cFifo.h
* DESCRIPTION:多線程安全的先進(jìn)先出隊列
*
* AUTHOR:yyc
*
* HISTORY:
*
* DATE:2002-8-19
*
*******************************************************************/
#ifndef __CFIFO_H__
#define __CFIFO_H__
#include "cMutex.h"
#include <deque>
//************************************************************************
//************************cFifo********************************************
namespace yyc
{
template<class T>
class cFifo
{
private:
//vc++不支持在類的聲明中給靜態(tài)常量賦值
//static const int MAX_LIST_NUM=4096;//隊列中最大元素個數(shù)
cMutex m_mutex;
std::deque<T *> m_v;
public:
cFifo();
~cFifo();
int add(T *ptr);
int push(T *ptr);
T * pop();
T * peek();
void clear();
bool empty()
{
return m_v.empty();
}
int size()
{
return m_v.size();
}
};
template<class T>
cFifo<T>::cFifo()
{
}
template<class T>
int cFifo<T>::add(T *ptr)
{
int retv=0;
m_mutex.lock();
m_v.push_back(ptr);
retv=m_v.size();
m_mutex.unlock();
return retv;
}
template<class T>
int cFifo<T>::push(T *ptr)
{
int retv=0;
m_mutex.lock();
if (m_v.size()>=4096) //MAX_LIST_NUM)
{
delete m_v.front();
m_v.pop_front();
}
m_v.push_back(ptr);
retv=m_v.size();
m_mutex.unlock();
return retv;
}
template<class T>
T * cFifo<T>::pop()
{
T *ptr=NULL;
m_mutex.lock();
if (!m_v.empty())
{
ptr=m_v.front();
m_v.pop_front();
}
m_mutex.unlock();
return ptr;
}
template<class T>
T * cFifo<T>::peek()
{
T *ptr=NULL;
m_mutex.lock();
if (!m_v.empty())
ptr=m_v.front();
m_mutex.unlock();
return ptr;
}
template<class T>
void cFifo<T>::clear()
{
T *ptr;
m_mutex.lock();
if(!m_v.empty())
{
std::deque<T *>::iterator it=m_v.begin();
for(;it!=m_v.end();it++)
{
ptr=(*it);
delete ptr;
}
m_v.clear();
}
m_mutex.unlock();
}
template<class T>
cFifo<T>::~cFifo()
{
clear();
}
}//namespace yyc
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -