高手帮忙看下buffer队列的问题

Hinagi 2009-09-27 04:00:52
我要管理一个队列,队列里面的数据是一个buffer(一个很大的数组short[4608])

请问这个队列的进队操作和出队操作改如何写? 我想的是把数组的头指针进行进队和出队,但是出队了的数据都为空~~~
以下是我进队和出队的代码,高手帮忙看看应该如何修改.



int QueueIN(SqQueue *sq, QUEUE_ELEMENT_TYPE qdata)
{
if(QueueFull(sq))
{
printf("The queue is full!\n");
return -1;
}
printf("in~~~~~~~~~~~~~~~~~~~~~~~~~\n");

sq->rear = (sq->rear + 1) % QUEUE_SIZE;
sq->queue[sq->rear] = qdata;
sq->qcount ++;

return 0;
}


int QueueOUT(SqQueue *sq, QUEUE_ELEMENT_TYPE *qdata)
{
if(QueueEmpty(sq))
{
printf("The queue is empty!\n");
return -1;
}

printf("out~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
sq->front = (sq->front + 1) % QUEUE_SIZE;
//*qdata = sq->queue[sq->front];
memcpy(qdata, sq->queue[sq->front], 4608);
sq->qcount --;

return 0;
}

这是一个全局的队列,进队和出队操作是在不同的线程中完成的.

//主线程
short pPCMBufferIn[4][2304*2] = {0};
memcpy(pPCMBufferIn, ((PWAVEHDR)wParam)->lpData, dwBytesRecorded); //打断点显示pPCMBufferIn里面有数据

for (int i = 0; i<4; i++)
{
QueueEnter(&bufferQueue, pPCMBufferIn[i]);
}

//子线程
short pPCMBufferOut[4][2304*2] = {0};

QueueDelete(&bufferQueue, &pPCMBufferOut[i]); //出来的数据都是0,不知道为什么


...全文
164 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hinagi 2009-09-27
  • 打赏
  • 举报
回复
好的,不错的建议,我先试试在同一个线程里面入队出队,找出问题原因.
谢谢哈.希望可以早点解决,困在这里很久了....
Hinagi 2009-09-27
  • 打赏
  • 举报
回复
sleep1秒能保证有入队操作完成

sq->rear,sq->front初值是0

如果那样改了的话出队操作就无效了(log里面一句出队的消息都没打出来)
whg01 2009-09-27
  • 打赏
  • 举报
回复
bufferQueue是怎么定义的?能保证2个线程访问同一个吗?
入队的操作没有问题。
建议你先改成在一个线程里入队、出对。没问题之后再改成多线程。
whg01 2009-09-27
  • 打赏
  • 举报
回复
你sleep1秒,就能保证主线程一定能完成队列的添加操作吗?

并发访问,有可能你
sq->rear,sq->front初值是多少?如果是0的话,要改成下面这样:
memcpy(qdata, sq->queue[sq->front], 4608);
sq->front = (sq->front + 1) % QUEUE_SIZE;
sq->qcount --;
Hinagi 2009-09-27
  • 打赏
  • 举报
回复
我想是不是因为我入队的时候传入的是局部的指针,那个函数完了指针就销毁了啊?

我改换成new来分配数组,但是结果还是一样.......
Hinagi 2009-09-27
  • 打赏
  • 举报
回复
对,不好意思,打出了,是QueueOut

我在子线程执行之前让它sleep了1秒,所以在出队的时候队列里面肯定有数据的
并发访问也没问题吧,出队的时候队列为空我有作处理啊
whg01 2009-09-27
  • 打赏
  • 举报
回复
QueueDelete就是QueueOut吧?
你要确定QueueDelete是在QueueEnter之后运行的。
对bufferQueue要加锁,防止并发访问。
Hinagi 2009-09-27
  • 打赏
  • 举报
回复
#define QUEUE_ELEMENT_TYPE short*

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧