AfxBeginThread() CreateThread() CreateRemoteThread ()有什么区别啊谢谢指教还有个问题我定义了一个全局的CSocket * ,  但是在线程函数中一用就出错,这是为什么啊
是不是在线程中不能用从外面传进来的CSocket*?

解决方案 »

  1.   

    AfxBeginThread是MFC封装过的,在它里面还得调用CreateThread()
    CreateRemoteThread为指定的进程创建线程在线程里不能直接访问,可以通过如下方式访问//线程函数
    UINT MyThread(LPVOID lParam)
    {
          CMyTestDlg *pDlg=(CMyTestDlg *)lParam;
         
          pDlg->你在CMyTestDlg中定义的变量.....
          ...      }//在你的主程序里调用,以对话框程序为例
    AfxBeginThread(MyThread,this)
      

  2.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=184279
      

  3.   

    使用MFC的CSocket应该避免直接传递CSocket*,因为MFC这里使用到了TLS,CSocket在跨线程时有问题。最好是
      

  4.   

    直接传递socket句柄可以的。
    AfxBeginThread()里面调用CreateThread(),
    而CreateThread()在win2000上很可能调用CreateRemoteThread()因为
    把CreateRemoteThread()第一个参数传递GetCurrentProcess()返回的参数就变成了
    CreateThread()
      

  5.   

    因为CSocket的成员变量是就是用socket()函数创建的返回值,所以可以传递到不同的线程中。
      

  6.   

    "使用MFC的CSocket应该避免直接传递CSocket*,因为MFC这里使用到了TLS,CSocket在跨线程时有问题。最好是 "不好意思,上次打的时候正在上班,突然领导过来了,所以就慌忙点了.我接着说完: 最好是传递SOCKET句柄,然后在另外一个线程中使用CSocket::Attach()来绑定生成新的CSOCKET对象再来使用,这样就可以避免MFC这个BUG.