我做了一个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 方式编译则正常,如果作为参数带进去,结果还是一样报错,不知何故,请各位大侠指点
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 方式编译则正常,如果作为参数带进去,结果还是一样报错,不知何故,请各位大侠指点
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
while (1)
{
Socket1->Create();
Sleep(DelayTime*1000);
}
http://expert.csdn.net/Expert/topic/1265/1265465.xml?temp=.4131891
chaojibenben(笨笨)的方法应该是没有问题的,不过你在主线程InitInstance中加上if (!AfxSocketInit())
{
AfxMessageBox("Windows 通信端口初始化失败");
return FALSE;
}