📄 cfifo.h
字号:
/*******************************************************************
* cFifo.h
* DESCRIPTION:多线程安全的先进先出队列
*
* 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++不支持在类的声明中给静态常量赋值
//static const int MAX_LIST_NUM=4096;//队列中最大元素个数
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -