ASSERT(pState->m_hSocketWindow != NULL);出错?

awjx 2005-09-21 05:48:08
我用CSocket写通信程序,但执行到下面的函数时总出错,是什么原因?
下面的函数是 ...\MFC\SRC\SOCKCORE.CPP 里的函数。
BOOL CSocket::PumpMessages(UINT uStopFlag)
{
// The same socket better not be blocking in more than one place.
ASSERT(m_pbBlocking == NULL);

_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;

ASSERT(pState->m_hSocketWindow != NULL);

BOOL bBlocking = TRUE;
m_pbBlocking = &bBlocking;
CWinThread* pThread = AfxGetThread();

// This is not a timeout in the WinSock sense, but more
// like a WM_KICKIDLE to keep message pumping alive
UINT nTimerID = ::SetTimer(pState->m_hSocketWindow, 1, m_nTimeOut, NULL);

if (nTimerID == 0)
AfxThrowResourceException();

BOOL bPeek = TRUE;
...
}

为什么 “ASSERT(pState->m_hSocketWindow != NULL);”会失败?
我搞不定了,帮忙啊!
...全文
535 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2005-09-22
  • 打赏
  • 举报
回复
注意Attach/Detach的用法就可以
DentistryDoctor 2005-09-22
  • 打赏
  • 举报
回复
你的问题应该是在线程之间传递了CSocket对象吧。正确的方法见如下的文章:
http://support.microsoft.com/default.aspx?scid=kb;en-us;175668
awjx 2005-09-22
  • 打赏
  • 举报
回复
不用CSocket,而直接用API会有这样的问题吗?









goodboyws 2005-09-21
  • 打赏
  • 举报
回复
用CAsyncSocket,处理OnSend和OnReceive,CSocket不能用在Thread里。
jazy 2005-09-21
  • 打赏
  • 举报
回复
csocket对象不能直接在线程之间传递,如果确实需要这样的功能,就用Detach函数取出SOCKET句柄来传递,收到句柄的线程再Attach句柄到本地创建的csocket对象
awjx 2005-09-21
  • 打赏
  • 举报
回复
楼上的可能说到点子上了,
因为我是在线程里调用Receive(...)出错的。
但如果一定用在线程里不行吗?
有解决方法吗?
goodboyws 2005-09-21
  • 打赏
  • 举报
回复
CSocket不要用在多线程里

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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