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

📄 safelist.h

📁 这是G.723和G.729的音频编解码的源代码
💻 H
字号:

#ifndef __SAFELIST_H__
#define __SAFELIST_H__
#include <afxmt.h>

template <class T>class CSafeList:public CList<T,T&>
{
	private:
		CCriticalSection m_CriSec;
	public:
		CEvent m_InputEvent;
		CSafeList(int nBlockSize = 16);
		virtual ~CSafeList();

		T& GetHead();
		T DetachHead();
		int GetCount();
		POSITION AddTail(T& newElement );
		void AddTail( CSafeList* pNewList );
		T RemoveHead();
		void RemoveAll();
};

template<class T>
CSafeList<T>::CSafeList(int nBlockSize):CList<T,T&>(nBlockSize)
{
}

template<class T>
CSafeList<T>::~CSafeList()
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();
	CList<T,T&>::RemoveAll();
}

template<class T>
T& CSafeList<T>::GetHead()
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();
	return CList<T,T&>::GetHead();
}

template<class T>
T CSafeList<T>::DetachHead()
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();
	return CList<T,T&>::GetHead();
}

template<class T>
int CSafeList<T>::GetCount()
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();
	return CList<T,T&>::GetCount();	
}

template<class T>
POSITION CSafeList<T>::AddTail(T& newElement )
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();
	if(IsEmpty())
		m_InputEvent.SetEvent();
	return CList<T,T&>::AddTail(newElement);
}

template<class T>
void CSafeList<T>::AddTail( CSafeList* pNewList )
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();

	if(IsEmpty())
	{
		if(!(pNewList->IsEmpty()))
			m_InputEvent.SetEvent();
	}
	CList<T,T&>::AddTail(pNewList);
}

template<class T>
T CSafeList<T>::RemoveHead()
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();	
	return CList<T,T&>::RemoveHead();
}

template<class T>
void CSafeList<T>::RemoveAll()
{
	CSingleLock sLock(&m_CriSec);
	sLock.Lock();
	CList<T,T&>::RemoveAll();
}
#endif//__SAFELIST_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -