MFC下我用多线程在服务器端建立连接(先试验建立一个)。在CSocket的派生类CMySocket的OnAccept()回调函数中,使用代码:
m_ListenSocket.Accept(m_ConnectSocket);//接受客户端连接m_ConnectSocket
CMyThread* m_pThread=AfxBeginThread(//产生用户界面线程m_pThread
      RUNTIME_CLASS(CMyThread),
      THREAD_PRIORITY_NORMAL,
      0,
      CREATE_SUSPENDED);
m_pThread->m_hSocket=m_ConnectSocket.Detach();//将客户端连接的句柄赋给CMyThread类的SOCKET类型的句柄m_hSocket
m_pThread->RusumeThread();//启动用户界面线程在用户界面线程类CMyThread为CWinThread的派生类,其中定义了SOCKET类型的句柄m_hSocket,且定义了CMySocket类的对象m_Socket,在CMyThread类的InitInstance()函数中用如下代码:
m_Socket.Attach(m_hSocket);//将客户连接套接字的句柄附着在线程类的CMySocket对象上。以上是按照书上所说的,在线程间不能直接传递套接字,而只能传递套接字句柄的方法来在用户界面线程中进行网络通信的。此方法在编译没有出错,但在服务器端Listen后,当客户端Connect()后,出错如下:某一内存,好象是在cdcdcded处不能为"Read",从而终止了运行。请问大侠,这是怎么回事?最好再请指点一下如何在多线程下使用ODBC?不用多线程的环境下的ODBC问题我已解决。在多线程下,我需要使用两个记录集,两个线程,每个线程中各操作一个记录集,使用SQL Server2000 DBMS。请问如何设计?紧急,请指点。解决问题立即送分!感谢!

解决方案 »

  1.   

    传送socket句柄前要先在主线程Detatch,在子线程里面AtatchODBC好像不支持多线程。不知道我记错没。我们这里的多线程访问数据库是用ado做的。
      

  2.   

    请大侠指点!最好给我发一个MFC的Dialog Based的服务端简单例子,对每个客户端连接请求各建立一个用户界面线程进行通信的例程。发到
    助我解决问题,立即奉送100分。
    紧急!感谢!