退出线程的时候如何等待socket关闭

kingconquer 2009-05-15 12:32:31
在主线程里,我需要退出的时候向工作线程发送消息, 并关闭socket连接,但怎样才能正常的等待socket关闭之后再退出啊??我用event好像不起作用,用WaitForSingleObject的时候close(socket)又阻塞住了。。。。请教各位大侠。。。。该怎么处理呢。。

工作线程
while(ThreadTerminated)
{
case WM_MYQUIT:
ThreadTerminated = 0;
break;
}
__fastcall MyThread::~ MyThread()
{
Close(socket); //阻塞在这里了.....
MyEvent->SetEvent();
}

主线程:
PostThreadMessage(pLoginThread->ThreadID, WM_DISCONNECTLOGIN, 0, 0);
MyEvent->WaitFor(INFINITE);
...全文
253 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingconquer 2009-05-15
  • 打赏
  • 举报
回复
搞定了。。
kingconquer 2009-05-15
  • 打赏
  • 举报
回复
那怎么判断它是否已经退出了呢。。。如果不判断好危险哦
lhy 2009-05-15
  • 打赏
  • 举报
回复
句柄无效应该是线程已经自己退出了吧
kingconquer 2009-05-15
  • 打赏
  • 举报
回复
我在OnClose里这样关闭工作线程(FreeOnTerminate=false)
thread -> Terminate(); // 退出线程
thread -> WaitFor(); // 主程序等待线程结束,后此函数才返回
delete thread; // 释放线程对象

但是出现thread error: 句柄无效。。。。。怎么会这样啊。。。
kingconquer 2009-05-15
  • 打赏
  • 举报
回复
OnTerminate是可以让线程关闭,我是想在主线程OnClose的时候确保工作线程已经退出了。。。这个不知道该怎么做。。。
我不懂电脑 2009-05-15
  • 打赏
  • 举报
回复
有个OnTerminated事件专门是用来处理线程退出问题的。
kingconquer 2009-05-15
  • 打赏
  • 举报
回复
笔误。。。。意思是那个意思。。。。。。

好像在主线程的窗口Close函数里面不能用TEVENT来等待线程关闭??
僵哥 2009-05-15
  • 打赏
  • 举报
回复
是closesocket(socket),而不是close(socket)

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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