⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfifo.h

📁 sun Linux 下的网络编程
💻 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 + -