您的位置:程序门 -> vc/mfc -> 进程/线程/dll



线程传递serversocket问题,急,拜托了,磕一个


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


线程传递serversocket问题,急,拜托了,磕一个
发表于:2007-06-01 09:58:34 楼主
void   cwsocketserverdlg::onbnclickedbutton1()
{
//   todo:   在此添加控件通知处理程序代码
      csocket   serversocket;
if(!(serversocket.create(6000)))
{
messagebox( "端口创建失败 ");
}
if(serversocket.listen())
{
afxbeginthread(beginreceive,&serversocket);
}
    while(1)
                {
                  ;
                }
    }

uint   cwsocketserverdlg::beginreceive(lpvoid   pparam)
{
      csocket*   serversocket=(csocket   *)pparam;
      csocket*   acceptsocket=new   csocket();
      cstring   str1;
      char   buf[20];
    serversocket-> accept(*acceptsocket);
      while(1)     //持续性线程函数里总会看到
      {
      acceptsocket-> receive(buf,20,0);
      str1=buf;
      str_all+= "\r\n ";
              str_all+=str1;
              afxgetapp()-> getmainwnd()-> setdlgitemtext(idc_edit1,str_all);
      }
      delete   acceptsocket;

      return   0;
}

最开始运行线程里accept居然不阻塞等待,直接执行后面while(1)内容,我估计是因为onclick执行完后把传递给线程使用的serversocket释放掉了,于是在onclick后面加了死循环,让他先别结束。但这样做报错。
请问怎么解决才能让serversocket传递后不被onclick释放。
发表于:2007-06-01 10:15:131楼 得分:0
将csocket   serversocket;在头文件中定义成类变量就可以了,不需要用whlie循环
发表于:2007-06-01 15:38:482楼 得分:0
void   cwsocketserverdlg::onbnclickedbutton1()
{
//   todo:   在此添加控件通知处理程序代码
if(!(serversocket.create(6000)))
{
messagebox( "端口创建失败 ");
}
if(serversocket.listen())
{
afxbeginthread(beginreceive,&serversocket);
}
}

uint   cwsocketserverdlg::beginreceive(lpvoid   pparam)
{
      csocket*   acceptsocket=new   csocket();
      cstring   str1;

      char   buf[20];
    serversocket.accept(*acceptsocket);
      while(1)     //持续性线程函数里总会看到
      {
      acceptsocket-> receive(buf,20,0);
      str1=buf;
  str_all+= "\r\n ";
              str_all+=str1;
              afxgetapp()-> getmainwnd()-> setdlgitemtext(idc_edit1,str_all);
          }

      delete   acceptsocket;

      return   0;
}


已经改成类变量了,报错,在accept报错
发表于:2007-06-01 16:42:393楼 得分:0
用static好了
发表于:2007-06-04 08:21:334楼 得分:0
已经是static了

在代码上能看出问题么?
发表于:2007-06-04 15:17:555楼 得分:0
没有连接你怎么能accept呢?


快速检索

最新资讯
热门点击