我做了一个socket多线程的简单程序,代码如下:
UINT ThreadFunction(LPVOID p)
{
ThreadInfo* pInfo=(ThreadInfo*)p;
int DelayTime=pInfo->iDelay ;
CSocketReceive*  Socket1;
Socket1=new CSocketReceive;
//Socket1=pInfo->lSocket ;
while (1)
{
Socket1->Create();
Sleep(DelayTime*1000);
}
delete Socket1;
return 0;
}
但运行的时候,在Create 处报错了,但如果用share dll 方式编译则正常,如果作为参数带进去,结果还是一样报错,不知何故,请各位大侠指点

解决方案 »

  1.   

    CSocketReceive是从什么类继承来的?
    CSocket类吗?
    如果是试着在new之前添加代码:
    #ifndef _AFXDLL
    #define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE
    #define _afxSockThreadState AfxGetModuleThreadState()

    _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
    if (pState->m_pmapSocketHandle == NULL)
    pState->m_pmapSocketHandle = new CMapPtrToPtr;
    if (pState->m_pmapDeadSockets == NULL)
    pState->m_pmapDeadSockets = new CMapPtrToPtr;
    if (pState->m_plistSocketNotifications == NULL)
    pState->m_plistSocketNotifications = new CPtrList;
    #endif
      

  2.   

    看不懂,能解释一下?怎么跳出循环?
    while (1)
    {
    Socket1->Create();
    Sleep(DelayTime*1000);
    }
      

  3.   

    用GetLastError()看看出了什么错误
      

  4.   

    socket需要和一个窗口关联,不能脱离窗口。
      

  5.   

    这是由于VC的BUG造成的。具体原因是MFC的SOCKET类需要用一个散列表来管理线程中的SOCKET对象。而在目前版本的VC中,在静态链接方式下没有分配这个表,因而造成断言错误。
    http://expert.csdn.net/Expert/topic/1265/1265465.xml?temp=.4131891
    chaojibenben(笨笨)的方法应该是没有问题的,不过你在主线程InitInstance中加上if (!AfxSocketInit())
    {
    AfxMessageBox("Windows 通信端口初始化失败");
    return FALSE;
    }