#define FILENAME_SIZE 33 class FILE_NAME_NODE { public: ADDFILE_INFO_T m_FileName; FILE_NAME_NODE * m_pNextFileName; }; typedef FILE_NAME_NODE* PFILE_NAME_NODE /// class FILE_NAME_QUEUE{ public: FILE_NAME_QUEUE(); ~FILE_NAME_QUEUE(); BOOL FilenameAdd(ADDFILE_INFO_T addfile);//add one to the end UINT FilenameDel(); // delete the first public: PFILE_NAME_NODE pBeginFileName; PFILE_NAME_NODE pEndFileName; BOOL isEmpty; CCriticalSection critical_section; protected: FILE_NAME_NODE m_FileNameNode[FILENAME_SIZE]; }; /// #include "FileName.h" FILE_NAME_QUEUE::FILE_NAME_QUEUE() { pBeginFileName=m_FileNameNode; pEndFileName=m_FileNameNode; for (int i=0;i<(FILENAME_SIZE-1);i++) { m_FileNameNode[i].m_pNextFileName=&m_FileNameNode[i+1]; } m_FileNameNode[FILENAME_SIZE-1].m_pNextFileName=m_FileNameNode; isEmpty=TRUE; } FILE_NAME_QUEUE::~FILE_NAME_QUEUE() { // do nothing ,system default process } BOOL FILE_NAME_QUEUE::FilenameAdd(ADDFILE_INFO_T addfile) { critical_section.Lock(); pEndFileName->m_FileName=addfile; pEndFileName=pEndFileName->m_pNextFileName; if (pEndFileName==pBeginFileName) { critical_section.Unlock(); return FALSE; } isEmpty=FALSE; critical_section.Unlock(); return TRUE; } UINT FILE_NAME_QUEUE::FilenameDel() { //pBeginFileName->m_FileName/*=NULL*/; critical_section.Lock(); pBeginFileName=pBeginFileName->m_pNextFileName; if (pBeginFileName==pEndFileName) { isEmpty=TRUE; critical_section.Unlock(); return 1; } critical_section.Unlock(); return 0; }