MFC用多线程 接收数据?

mfc_xinshou 2013-01-06 09:58:56
本人用网上介绍的方法,在一个Button下创建了一个线程:
void CmyprojectDlg::OnBnClickedButton2()
{
DWORD threadID;
m_hThread=CreateThread(NULL,0,FuncThread,this,0,&threadID);
}

线程函数为FuncThread,她的任务是接收数据
DWORD WINAPI FuncThread(LPVOID lpParamter) 
{
CmyprojectDlg *dlg =(CmyprojectDlg*)lpParamter;
dlg->receive_data();
}

当然我的程序中有一段是CMyproject::receive_data(void)
问题是:接收不到数据
...全文
323 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mfc_xinshou 2013-01-10
  • 打赏
  • 举报
回复
ool CmyprojectDlg::OnInitSocket(void) //socket初始化 { if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { MessageBox("Failed to load Winsock.\n"); return false; } sClient=socket(PF_INET,SOCK_DGRAM,0); //建立客户端数据报套接口 if(sClient==INVALID_SOCKET) { MessageBox("socket( )Failed"); return false; } ... }
mfc_xinshou 2013-01-10
  • 打赏
  • 举报
回复
我的程序现在能接收到数据了,通过查看data.txt文件可以看到。程序中在receive_data里有一段是 if(detected==1) //如果数据排列整齐,就调用函数visibility_drawing函数,把数据显示在对话框上 { CmyprojectDlg::visibility_drawing(); Sleep(100); } 新的问题是接收到的数据显示不出来
酒红色的泪 2013-01-10
  • 打赏
  • 举报
回复
套接字的初始化工作何在?
mfc_xinshou 2013-01-10
  • 打赏
  • 举报
回复
我应该怎么把接收数据这部分独立出来
zyrr159487 2013-01-09
  • 打赏
  • 举报
回复
设个断点看看吧,是哪一步没有走到
sumos 2013-01-09
  • 打赏
  • 举报
回复
我感觉你这个程序写的好乱。首先,对于文件的处理,你这样就不合理。接收网络数据,你这里是在对话框的函数中,这明显有问题,你要把接收数据这块独立出来。
mfc_xinshou 2013-01-09
  • 打赏
  • 举报
回复
没人理我啊,帮帮我
mfc_xinshou 2013-01-08
  • 打赏
  • 举报
回复
怎么用网络监控看数据是否发送到了,原谅我这个菜鸟问这么弱的问题
lijianli9 2013-01-08
  • 打赏
  • 举报
回复
你确认数据发送到了,你用网络监控看看。
Eleven 2013-01-07
  • 打赏
  • 举报
回复
你Debug调试一下你的receive_data函数看看,哪里函数调用失败了
mfc_xinshou 2013-01-07
  • 打赏
  • 举报
回复
void CmyprojectDlg::receive_data(void)
{
// 初始化
int count=0;
int CountData=0; //CountData表示计数的数据,与1-71的互相关数据和72-89的自相关数据对应
int detected=0; //表示数据是否对齐,detected=1表示已经对齐
int ThisTrue=0;
int LastTrue=0;
for(int i=0;i<DATA_BUFFER;i++) //最终的数据
v_final[i]=0;

FILE *fp;
fopen_s(&fp,"data.txt","w+");
fclose(fp);
while(1)
{
memset(recv_buf,0,sizeof(recv_buf));
FD_ZERO(&readSet);
FD_SET(sClient,&readSet);
fopen_s(&fp,"data.txt","a");
if(FD_ISSET(sClient,&readSet))
{
iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&ser,&iLen_ser);
再对数据进行格式转换;
将数据对齐并排列;
v_final[k]=double(v);
fprintf_s(fp,"%d ",recv_buf[((j+1)*DATA_BUFFER/2-1)*2] +recv_buf[((j+1)*DATA_BUFFER/2- 1)*2+1]*256);
fprintf_s(fp,"\n");
fclose(fp);
}
closesocket(sClient);
WSACleanup( );
}
lijianli9 2013-01-07
  • 打赏
  • 举报
回复
receive_data是阻塞的还是异步的,你是怎么接收的?
wandazui 2013-01-07
  • 打赏
  • 举报
回复
换了个号,用的别人的,和之前的mfc_xinshou是同一个人
wandazui 2013-01-07
  • 打赏
  • 举报
回复
receive_data函数应该没什么问题,因为我这个程序是在之前人写的基础上修改的,他用的是单线程,点完接收数据之后,能接收到数据,问题是程序就卡住不动了,干不了别的。他建议我用多线程,我就写个如上所述,receive_data 都是用的原来程序里面的,所以我觉得应该不是里面的错吧,可是到底错在哪呢,我是个菜鸟~~
青松2 2013-01-06
  • 打赏
  • 举报
回复
把你的receive_data(void)贴上来看看啊

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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