读书人

求教一个获取线程中数据的有关问题

发布时间: 2013-09-05 16:02:07 作者: rapoo

求教一个获取线程中数据的问题.
首先对来看这个帖子的高手们表示感谢,CSDN有爱.

本人最近想用线程+winsock做一个网络的接收,我想请教一下大家,我用一个线程recv,然后我在线程里开辟一块缓存区把要的数据存进去,当我的主进程或者别的线程需要使用这个线程中缓存区的数据时我应该怎样去去获取线程中的数据呢? 多线程
[解决办法]
创建线程的时候, 把一个指针传进去, 这个指针可以是该线程的父线程所在的窗口指针, 例如this
this所谓类定义一个指针, 在运行时赋值为想要使用该线程数据的线程指针.
在recv线程里, 使用回调函数将recv的数据传出.
说的乱七八糟的= =!

typedef void (CALLBACK* callbackfunc)(void * pOwner /*父对象指针*/
,void * buf /*接收到的缓冲区*/)
Class CA
{
....
CWnd *m_pOwner;
callbackfunc m_callbackfunc; //串口读取回调函数
....
}

void threadfunc(PVOID *pp)
{
CA* pThis = (CA* )pp;
while(1)
{
recv()...buf...
方法1.pThis->pOwner->sendmessage(WM_OOXX, buf, 0);
方法2.pThis->m_callbackfunc(pThis->pOwner, buf);
}
}
[解决办法]
管道 啥的都行.但麻烦了点.
回调也可以.但要控制好 何时callback.

简单可以搞个全局对象int recvcount=0;.申请个g_recvbuff=new char[1024*1024]; 1M 线程recv了后,往g_recvbuff里面写. recvcount+=写的长度. 以后每次memcpy(g_recvbuff+recvcount,recv到的data,要写的长度); 需要线程安全的自己加锁. 以后其他线程就可以去取g_recvbuff.然后处理.

读书人网 >VC/MFC

热点推荐