📄 safelist.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 + -