在多线程中如何创建CSOCKET???

longchengdong 2001-02-12 10:58:00
class RecvThread : public CWinThread
{
DECLARE_DYNCREATE(RecvThread)
public:
RecvThread(); // protected constructor used by CSocket *mmm;
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
public:
virtual ~RecvThread();
DECLARE_MESSAGE_MAP()
};

BOOL RecvThread::InitInstance()
{
mmm = new class CSocket();
mmm->Create(0, SOCK_STREAM, "192.168.0.16");
mmm->Connect("192.168.0.188", 20003);
}

在mmm->Create时出错,为什么?
...全文
201 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meifen 2001-07-13
  • 打赏
  • 举报
回复
o
longchengdong 2001-02-12
  • 打赏
  • 举报
回复
lhxx:
用你的方法,同样的错误!
adone 2001-02-12
  • 打赏
  • 举报
回复
这是VC的bug之一。安装vs6 sp3就可以解决。
如果不原安装sp3,在你的线程初始化时加上:
#ifndef _AFXDLL
AFX_MODULE_THREAD_STATE* pState = ::AfxGetModuleThreadState();
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
并且you must use MFC as a static library
随风bj 2001-02-12
  • 打赏
  • 举报
回复
不能用new的方式
CSocket mmm;
mmm.Create(...);
mmm.Connect(...);
longchengdong 2001-02-12
  • 打赏
  • 举报
回复
报 Unhandled exception!
sunriselx 2001-02-12
  • 打赏
  • 举报
回复
哥们,为什么不用winsock,csocket效率太低了,winsock不用new,定义一个后用CArray记录下来就行了
随风bj 2001-02-12
  • 打赏
  • 举报
回复
SORRY, 搞错了,
以为你已经初始化了,呵呵
秦岭刀客 2001-02-12
  • 打赏
  • 举报
回复
哈哈 ,你忘记了初始化socket;
在应用的初始化部分加下如下示代码:
BOOL CSecuChatSvrApp::InitInstance()
{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
...
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧