怎么把tcp接受到的数据流放入一个循环队列

hua_2011 2011-11-29 10:53:07
我在做一个视频流的底层通信,现在就是要通过tcp线程来接受数据流,并放入一个循环队列中,然后再通过udp线程发送出去。遇到的问题是,该怎么把接收到的数据流放入队列里去呢?我的想法是把接受缓冲区的指针放入队列里
下面是我的队列的实现代码:
//BufQueue.h
#include "stdafx.h"
#include <windows.h>

#define MAX_SIZE 1024

#pragma once
class BufQueue
{
public:
BufQueue(void);
~BufQueue(void);
void push(char *p);
char * pop();
public:
char **base;
int front;
int rear;
CRITICAL_SECTION m_cs;//读写互斥锁

};

//BufQueue.cpp
#include "StdAfx.h"
#include <string.h>
#include "BufQueue.h"


BufQueue::BufQueue(void)
{
base = new char *[MAX_SIZE];
front = rear = 0;
InitializeCriticalSection(&m_cs);

}

BufQueue::~BufQueue(void)
{
delete []base;
base = NULL;
DeleteCriticalSection(&m_cs);
}

void BufQueue::push(char *p)
{
EnterCriticalSection(&m_cs);

if((rear+1)%MAX_SIZE == front)
printf("warning:队列满");
base[rear] = p;
rear = (rear+1)%MAX_SIZE;
LeaveCriticalSection(&m_cs);


}

char *BufQueue::pop()
{
char *ret = NULL;
EnterCriticalSection(&m_cs);
if(front != rear)
{
ret = base[front];
front = (front+1)%MAX_SIZE;
}
LeaveCriticalSection(&m_cs);

return ret;
}

//main.cpp
#include "stdafx.h"
#include "BufQueue.h"
#include <Windows.h>

DWORD WINAPI Run1proc(LPVOID lpParameter);
DWORD WINAPI Run2proc(LPVOID lpParameter);

BufQueue bufQueue;
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE thread1;
HANDLE thread2;
thread1=CreateThread(NULL,0,Run1proc,NULL,0,NULL);
thread2=CreateThread(NULL,0,Run2proc,NULL,0,NULL);
CloseHandle(thread1);
CloseHandle(thread2);

Sleep(1000);

return 0;
}

DWORD WINAPI Run1proc(LPVOID lpParameter)
{

char *p = "Hello,welcome";
for(int i=0;i<10;i++)
{
bufQueue.push(p);
}
return 0;
}

DWORD WINAPI Run2proc(LPVOID lpParameter)
{

char *ret = NULL;
int i = 1;
ret = bufQueue.pop();
while(ret!=NULL)
{
printf("%d,%s\n",i,ret);
i++;
ret = bufQueue.pop();
}
return 0;
}
测试函数是把字符串指针放入队列,可以执行,但是如果是一个指向接受缓冲区的指针,好像指针是放进去了,但就是数据没放进去,例如

char *recvbuf = new char[1024];//接受缓冲区
.........
recv(socket,recvbuf,1024,0);//tcp接受
........
像这样,该如何把收到的数据recvbuf放入队列让udp线程取呢
又例如一个结构体
typedef struct
{
unsigned char name[5];
unsigned char sex;
unsigned int age
}Person;
对于上面的结构体,又该怎么存入队列呢,


这个问题困惑我好几天了,请路过的高手们指点指点,我是用vs2003编译的
...全文
59 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

65,187

社区成员

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

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