宁静以致远
zgf的blog
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

留言簿(15)

随笔分类

随笔档案

文章档案

友情链接

资料收藏

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-29 文章-8 评论-93 Trackbacks-0
问题描述:
        先在线程中创建并使用CSocket,然后在另一个对话框中再创建CSocket,在Create之后就自动跳出。

简要代码如下:
unsigned long __stdcall threadDownloadFile(LPVOID lparam)

        CSecurityPage * dlg = (CSecurityPage *)lparam;
         CSocket sock;         //创建CSocket
         if(!sock.Create())
              return 0;
         sock.Connect(ADDRESS_SERVER,PORT_SERVER);
        ..............
        sock.Close();
        dlg->PostMessage(WM_COMMAND, IDOK);  //关闭CSecurityPage对话框进入下一步
         return 0;

//创建一个线程
void CSecurityPage::OnEnter()

     ............
    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadDownloadFile,this,0,NULL);
}

//线程执行完后显示CShow对话框,OnSubmit中再次用到了CSocket
void CShow::OnSubmit()  

         CSocket sock;         //再创建CSocket
         if(!sock.Create())
        {
              AfxMessageBox(L“Create error“); //这个没弹出来
              return 0;
        }
          AfxMessageBox(L“Connect server“);   //这个也没弹出来
         
         //下面的都没执行,OnSubmit()直接返回了
         sock.Connect(ADDRESS_SERVER,PORT_SERVER);
        ..............
        sock.Close();


程序在evc4.0中编译,在wince4.2上运行。

问题的解决:
      将CSocket全部换成socket,connect,send,recv等API。

我不清楚错误的原因是什么,也许CSocket的内部有些小动作。
posted on 2006-03-10 09:59 zgf的blog 阅读(2342) 评论(7)  编辑 收藏
Comments
  • # re: 两次使用CSocket碰到的问题
    清风雨
    Posted @ 2006-03-10 10:12
    看来MFC的多线程设计的不怎么好。—— 更有可能是你多线程没用好。

    阿荣的blog里好像有个讲类似问题的,也是多线程使用MFC的CSocket。
  • # re: 两次使用CSocket碰到的问题
    zgf
    Posted @ 2006-03-10 10:16
    他的那篇文章是关于跨线程使用CSocket的,也就是一个CSocket在几个线程中使用。
    我这儿的情况是两个独立的CSocket.
    线程中创建了一个
    在后面的对话框中又创建了一个
  • # re: 两次使用CSocket碰到的问题
    zgf的blog
    Posted @ 2006-03-10 10:19
    并且从过程可以确定在后面的对话框显示之前前面的线程已经结束
  • # re: 两次使用CSocket碰到的问题
    Diviner
    Posted @ 2006-03-10 17:39
    CSocket的优点在于可以跟WIN的消息结合。
  • # re: 两次使用CSocket碰到的问题
    end
    Posted @ 2006-03-10 20:33
    可以尝试用AfxBeginThread替换CreateThread,如果新线程用到了mfc,使用CreateThread会绕过一些mfc必要的线程相关数据的初始化,可能导致线程中的mfc组件使用异常
  • # re:怎么没有看到讨论CAsyncSocket
    mm
    Posted @ 2006-03-26 00:41
    找了很就系统的讲这个的怎么这么少?
  • # re: 两次使用CSocket碰到的问题
    gytuk
    Posted @ 2006-09-25 19:01
    http://www.grupowe-pijane-studentki.xpanienki.pl @X@ <a href="http://www.sutki-brunetki.xpanienki.pl">sutki brunetki</a> @X@ [URL=http://www.biurowy-striptiz.xpanienki.pl]biurowy striptiz[/URL] @X@
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]