苦恼:多线程下的Socket关闭问题

easydw 2007-02-11 04:21:36
因为Socket在连接时总是要停顿等待,此时主程序往往会定住不动,所以想把连接过程放到子线程中运行,经过测试也确实通过;但是关闭Socket连接却出了问题,一旦运行关闭函数就出问题,请各位帮着看看

BeginThread()
{
m_pSocket = new CClientSocket;
if (!m_pSocket->Create())
{ ... }
if (!m_pSocket->Connect(m_UserMsg.pServerMsg->IpAddr, 6877))
{ ... }
}

EndThread
{
//下面两句均出现问题
m_pSocket->Close();
delete m_pSocket;
}
...全文
577 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mimong_lin 2007-04-09
  • 打赏
  • 举报
回复
关闭的时候,最好判断一下句柄的有效性吧。
shanfeng888 2007-02-12
  • 打赏
  • 举报
回复
最好在那里NEW就在那里delte 这样更加好管理一点.而且endthread的时候也没有判断指针是否存在.我想可以用楼上的方法试一下再说.
gaopl_8278 2007-02-12
  • 打赏
  • 举报
回复
变量用全局静态的试试.如:static CClientSocket *pSocket;
如果这样不行就用事件的方法在同一个纯程中实现吧.很简单.
dog_in_yellow 2007-02-12
  • 打赏
  • 举报
回复
CSocket和CAsyncSocket非线程安全,在哪个线程Create了该对象,以后对该对象的访问都必须在同一个线程,否则会出错。
如上面的程序,BeginThread和EndThread必须是在同一个线程执行,否则不能这么写。
seawolflover 2007-02-12
  • 打赏
  • 举报
回复
我想应该遍历所有的线程吧!
football 2007-02-12
  • 打赏
  • 举报
回复
调用EndThread的时候,请确保线程已经执行到
BeginThread()
{
m_pSocket = new CClientSocket;
if (!m_pSocket->Create())
{ ... }

18,356

社区成员

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

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