/*! * 初始化FIFO缓冲区 * 1. 检查缓冲区是否初始化过,如果没有初始化过则继续 * 2. 检查参数, 如果参数不正确则提示出错 * 3. 创建缓冲块列表 * 4. 创建队列锁对象用于包括队列的访问 * 5. 设置初始化成功标志 */ int FifoBuffer::init(int count,int chunksize) { // 关于空闲链表 m_freeQueueFirst = 0; // 头 m_freeQueueLast = 0; // 尾 m_freeCount = 0; // 计数 // 关于数据链表 m_outQueueFirst = 0; // 头 m_outQueueLast = 0; // 尾 m_outCount = 0; // 计数 m_dataFrame.context = 0; m_count = count ; m_chunksize = chunksize; m_mempool = (unsigned char*)malloc(m_chunksize*m_count); if (m_mempool == 0) { return 6; //DH_PLAY_ALLOC_MEMORY_ERROR } memset(m_mempool, 0, m_chunksize*m_count); bool bRet = createFreeList(); if (!bRet) return 6; //DH_PLAY_ALLOC_MEMORY_ERROR m_inited = true; m_dataFrame.context = 0; m_bReadNull = false; return 0; }
int main (int argc, char *argv[]) { uint8_t ret, cnt; pthread_t tid[numThreads]; printf("\t %s: Start\n", __func__); createFreeList(numListElm, &gFreeList); INIT_LOCK(freeListLock); INIT_LOCK(list1Lock); INIT_LOCK(list2Lock); for (cnt = 0; cnt < numThreads; cnt++) { ret = pthread_create(&tid[cnt], NULL, fptr[cnt], NULL); assert(ret == 0); } printf("\t %s: End\n", __func__); for (cnt = 0; cnt < numThreads; cnt++) { ret = pthread_join(tid[cnt], NULL); assert(ret == 0); } return 0; }
/*! * 重置缓冲区 * 1. 清除数据块链表和空闲块链表 * 2. 重新组织空闲快链表 */ int FifoBuffer::reset() { EnterCriticalSection(&m_DataAccessLock) ; cleanFreeList(); cleanDataList(); bool bRet = createFreeList(); if (!bRet) { LeaveCriticalSection(&m_DataAccessLock); return 6; //DH_PLAY_ALLOC_MEMORY_ERROR } m_dataFrame.context = 0; LeaveCriticalSection(&m_DataAccessLock) ; return 0; }