Ejemplo n.º 1
0
/*!
 * 初始化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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}