经典队列存取
来源:互联网 发布:数据库模型图是什么 编辑:程序博客网 时间:2024/06/06 11:47
#define SNAP_QUEUE_MAX 5
typedef struct __snap_queue_ {
HI_BOOL bHasLP;
char szLP[64];
unsigned int uiSpeed;
unsigned short usColor;
unsigned char ucWay;
unsigned int uiBrokenRuleType;
unsigned int uiLPLeft;
unsigned int uiLPTop;
unsigned int uiLPRight;
unsigned int uiLPBottom;
unsigned char *p_YBuff;
unsigned char *p_UVBuff;
unsigned int uiFrameID;
unsigned int uiWidth;
unsigned int uiSnapMS;//
unsigned long ulSnapTM;//
}strc_snap_queue;
strc_snap_queue m_SnapQueueArray[SNAP_QUEUE_MAX];
int m_iSnapQueueIn=0;
int m_iSnapQueueOut=0;
//从队列中取 数据
void *SH_snap_queue_thread(void *arg) {
strc_snap_queue *p_que;
int iTimes;
m_iSnapQueueIn=0;
m_iSnapQueueOut=0;
iTimes = 0;
while(1) {
if (m_iSnapQueueIn == m_iSnapQueueOut) //队列没有数据,等待
{
usleep(10000);//10mS
iTimes ++;
if (iTimes > 500) {
iTimes = 0;
//printf("m_iSnapQueueIn=%d m_iSnapQueueOut=%d in %s\n", m_iSnapQueueIn , m_iSnapQueueOut, __FUNCTION__);
}
continue;
}
p_que = &m_SnapQueueArray[m_iSnapQueueOut];
m_fSnapFuncCallBackDoSnapDone(
p_que->uiFrameID,
p_que->p_YBuff,
p_que->p_UVBuff,
p_que->uiWidth,
p_que->bHasLP,
p_que->szLP,
p_que->uiSpeed,
p_que->usColor,
p_que->ucWay,
p_que->uiBrokenRuleType,
p_que->uiLPLeft,
p_que->uiLPTop,
p_que->uiLPRight,
p_que->uiLPBottom,
p_que->uiSnapMS,
p_que->ulSnapTM
);
m_iSnapQueueOut = (m_iSnapQueueOut + 1) % SNAP_QUEUE_MAX; //m_iSnapQueueOut +1 , 注意%是求余, 1%5=1 ,2%5=2
}
}
//向队列中存 数据
void CallBack_VirtCle_DoOsd(unsigned char bHasLP, char *p_cLPArray,
unsigned int uiSpeed, unsigned short usColor, unsigned char ucWay,
unsigned int uiBrokenRuleType,
unsigned int uiLPLeft, unsigned int uiLPTop, unsigned int uiLPRight, unsigned int uiLPBottom,
unsigned char *p_ucYData, unsigned char *p_ucUVDta, unsigned int uiWidth, unsigned int uiFrameID
) {
int iSnapQueueIn;
struct timeval tvSnap;
unsigned int uiSnapMS;
unsigned long ulSnapTM;
//记录抓拍时间
gettimeofday(&tvSnap,0);
uiSnapMS = tvSnap.tv_usec/1000;
ulSnapTM = time(NULL);
iSnapQueueIn = (m_iSnapQueueIn + 1) % SNAP_QUEUE_MAX;// m_iSnapQueueIn 的下一个位置
if ( iSnapQueueIn == m_iSnapQueueOut) { //队列满了,存的快,取的慢
printf("Err: Snap Queue is full m_iSnapQueueIn=%d m_iSnapQueueOut=%d in %s. \n", m_iSnapQueueIn , m_iSnapQueueOut, __FUNCTION__);
SH_drvif_ReleaseFrame(uiFrameID);
return;
}
//存 数据
m_SnapQueueArray[m_iSnapQueueIn].p_YBuff = p_ucYData;
m_SnapQueueArray[m_iSnapQueueIn].p_UVBuff = p_ucUVDta;
m_SnapQueueArray[m_iSnapQueueIn].uiFrameID = uiFrameID;
m_SnapQueueArray[m_iSnapQueueIn].uiWidth = uiWidth;
m_SnapQueueArray[m_iSnapQueueIn].bHasLP = bHasLP;
strcpy(m_SnapQueueArray[m_iSnapQueueIn].szLP, p_cLPArray);
m_SnapQueueArray[m_iSnapQueueIn].uiSpeed = uiSpeed;
m_SnapQueueArray[m_iSnapQueueIn].usColor = usColor;
m_SnapQueueArray[m_iSnapQueueIn].ucWay = ucWay;
m_SnapQueueArray[m_iSnapQueueIn].uiBrokenRuleType = uiBrokenRuleType;
m_SnapQueueArray[m_iSnapQueueIn].uiLPLeft = uiLPLeft;
m_SnapQueueArray[m_iSnapQueueIn].uiLPTop = uiLPTop;
m_SnapQueueArray[m_iSnapQueueIn].uiLPRight = uiLPRight;
m_SnapQueueArray[m_iSnapQueueIn].uiLPBottom = uiLPBottom;
m_SnapQueueArray[m_iSnapQueueIn].uiSnapMS = uiSnapMS;
m_SnapQueueArray[m_iSnapQueueIn].ulSnapTM = ulSnapTM;
m_iSnapQueueIn = iSnapQueueIn;//m_iSnapQueueIn 向下移动一位,+1 ;iSnapQueueIn为m_iSnapQueueIn的下一个
}
typedef struct __snap_queue_ {
HI_BOOL bHasLP;
char szLP[64];
unsigned int uiSpeed;
unsigned short usColor;
unsigned char ucWay;
unsigned int uiBrokenRuleType;
unsigned int uiLPLeft;
unsigned int uiLPTop;
unsigned int uiLPRight;
unsigned int uiLPBottom;
unsigned char *p_YBuff;
unsigned char *p_UVBuff;
unsigned int uiFrameID;
unsigned int uiWidth;
unsigned int uiSnapMS;//
unsigned long ulSnapTM;//
}strc_snap_queue;
strc_snap_queue m_SnapQueueArray[SNAP_QUEUE_MAX];
int m_iSnapQueueIn=0;
int m_iSnapQueueOut=0;
//从队列中取 数据
void *SH_snap_queue_thread(void *arg) {
strc_snap_queue *p_que;
int iTimes;
m_iSnapQueueIn=0;
m_iSnapQueueOut=0;
iTimes = 0;
while(1) {
if (m_iSnapQueueIn == m_iSnapQueueOut) //队列没有数据,等待
{
usleep(10000);//10mS
iTimes ++;
if (iTimes > 500) {
iTimes = 0;
//printf("m_iSnapQueueIn=%d m_iSnapQueueOut=%d in %s\n", m_iSnapQueueIn , m_iSnapQueueOut, __FUNCTION__);
}
continue;
}
p_que = &m_SnapQueueArray[m_iSnapQueueOut];
m_fSnapFuncCallBackDoSnapDone(
p_que->uiFrameID,
p_que->p_YBuff,
p_que->p_UVBuff,
p_que->uiWidth,
p_que->bHasLP,
p_que->szLP,
p_que->uiSpeed,
p_que->usColor,
p_que->ucWay,
p_que->uiBrokenRuleType,
p_que->uiLPLeft,
p_que->uiLPTop,
p_que->uiLPRight,
p_que->uiLPBottom,
p_que->uiSnapMS,
p_que->ulSnapTM
);
m_iSnapQueueOut = (m_iSnapQueueOut + 1) % SNAP_QUEUE_MAX; //m_iSnapQueueOut +1 , 注意%是求余, 1%5=1 ,2%5=2
}
}
//向队列中存 数据
void CallBack_VirtCle_DoOsd(unsigned char bHasLP, char *p_cLPArray,
unsigned int uiSpeed, unsigned short usColor, unsigned char ucWay,
unsigned int uiBrokenRuleType,
unsigned int uiLPLeft, unsigned int uiLPTop, unsigned int uiLPRight, unsigned int uiLPBottom,
unsigned char *p_ucYData, unsigned char *p_ucUVDta, unsigned int uiWidth, unsigned int uiFrameID
) {
int iSnapQueueIn;
struct timeval tvSnap;
unsigned int uiSnapMS;
unsigned long ulSnapTM;
//记录抓拍时间
gettimeofday(&tvSnap,0);
uiSnapMS = tvSnap.tv_usec/1000;
ulSnapTM = time(NULL);
iSnapQueueIn = (m_iSnapQueueIn + 1) % SNAP_QUEUE_MAX;// m_iSnapQueueIn 的下一个位置
if ( iSnapQueueIn == m_iSnapQueueOut) { //队列满了,存的快,取的慢
printf("Err: Snap Queue is full m_iSnapQueueIn=%d m_iSnapQueueOut=%d in %s. \n", m_iSnapQueueIn , m_iSnapQueueOut, __FUNCTION__);
SH_drvif_ReleaseFrame(uiFrameID);
return;
}
//存 数据
m_SnapQueueArray[m_iSnapQueueIn].p_YBuff = p_ucYData;
m_SnapQueueArray[m_iSnapQueueIn].p_UVBuff = p_ucUVDta;
m_SnapQueueArray[m_iSnapQueueIn].uiFrameID = uiFrameID;
m_SnapQueueArray[m_iSnapQueueIn].uiWidth = uiWidth;
m_SnapQueueArray[m_iSnapQueueIn].bHasLP = bHasLP;
strcpy(m_SnapQueueArray[m_iSnapQueueIn].szLP, p_cLPArray);
m_SnapQueueArray[m_iSnapQueueIn].uiSpeed = uiSpeed;
m_SnapQueueArray[m_iSnapQueueIn].usColor = usColor;
m_SnapQueueArray[m_iSnapQueueIn].ucWay = ucWay;
m_SnapQueueArray[m_iSnapQueueIn].uiBrokenRuleType = uiBrokenRuleType;
m_SnapQueueArray[m_iSnapQueueIn].uiLPLeft = uiLPLeft;
m_SnapQueueArray[m_iSnapQueueIn].uiLPTop = uiLPTop;
m_SnapQueueArray[m_iSnapQueueIn].uiLPRight = uiLPRight;
m_SnapQueueArray[m_iSnapQueueIn].uiLPBottom = uiLPBottom;
m_SnapQueueArray[m_iSnapQueueIn].uiSnapMS = uiSnapMS;
m_SnapQueueArray[m_iSnapQueueIn].ulSnapTM = ulSnapTM;
m_iSnapQueueIn = iSnapQueueIn;//m_iSnapQueueIn 向下移动一位,+1 ;iSnapQueueIn为m_iSnapQueueIn的下一个
}
0 0
- 经典队列存取
- 一个经典的队列
- 消息队列--经典
- Rescue(经典队列)
- java 经典队列
- 在IBM WebSphere MQ本地队列中存取消息
- 在IBM WebSphere MQ本地队列中存取消息
- 在IBM WebSphere MQ本地队列中存取消息
- 多线程环境下安全的消息队列存取---利用信号量
- 两种利用内存流存取图片的经典例子
- MSMQ经典消息传输队列
- 单调队列经典题目 poj2823
- 【经典优先队列例题整理】
- Linux RCU队列(1)经典RCU队列实现
- 数据结构经典算法汇总___循环队列:
- 经典数据结构之数组实现的队列
- 单调队列经典题目 FOJ 1894
- UVA - 1427(经典滑动队列优化dp)
- swift-集合类型01-数组的基本操作
- spring是怎么知道哪个方法或者类上有@requestMapping这个注解
- SMC计算节点重刷系统步骤
- hashMap源码分析
- iOS小明开发笔记(十二) (Quartz2D简单使用一)
- 经典队列存取
- 文字自适应label的frame
- 未备份etc下ssh目录之设置节点间无密码访问步骤
- Dsoframer注册方法
- 查找单链表倒数第k个元素
- 搭建javaweb项目
- Swift中文教程(十三) 继承
- Gerrit 使用
- -all_load和-force_load 的区别