[*****]开一个线程,用WaitForSingleObject等待事件,参数填写INFINITE,直接结束线程无反映?

lin_style 2010-12-27 11:20:01
RT

主线程:
WAIT_FAILED==WaitForSingleObject(m_hThreadAccept[i], INFINITE) )


在m_hThreadAccept对应的线程中也在做一样的事情
WaitForSingleObject(m_hEvent, INFINITE);



结果再主线程中, 即使先_endthreadex,也没反映~。这种情况下怎么让线程返回?虽然无关大碍,还是想问问。。
我想的解决方法:
时间不用INFINITE,这样会影响到其他东西,不用
主线程中进行一个能触发m_hEvent的操作。对于主线程说,完全不知道m_hEvent存在。。
...全文
270 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin_style 2010-12-27
  • 打赏
  • 举报
回复
回楼上
这些问题我都想过
问题是,主,子线程完全是不搭嘎的,不强制性对它们之间做了什么进行耦合。我只想从系统API程度上关闭即可。
lazy_2010 2010-12-27
  • 打赏
  • 举报
回复
通过 shutdown 和 closesocket 关闭监听子线程
acaiacc 2010-12-27
  • 打赏
  • 举报
回复
退出之前发送消息让子线程结束
主线程WaitForSingleObject(..., xxxx) 等待结束

并且子线程内部此时要能接收到并处理消息,不要给屏蔽了
lin_style 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]

你不会是死锁了吧,主线程里最好不要做WaitForSingleObject(..., INFINITE)的操作

子线程先退出,最后主线程再退出
[/Quote]

子线程做的工作是accept,触发的条自然是一个连接的到来;
但也就是说,在连接没到来的时候可以看成是一个死锁,但是这个时候程序结束的话,即使手动_endthreadex子线程也没反映。

我的问题就是能不能在这个情况下,如果我想关闭也能让子线程返回?然后主线程正确读到子线程返回
李明子 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
你不会是死锁了吧,主线程里最好不要做WaitForSingleObject(..., INFINITE)的操作

子线程先退出,最后主线程再退出
[/Quote]
++,应该是死锁了!
Eleven 2010-12-27
  • 打赏
  • 举报
回复
你不会是死锁了吧,主线程里最好不要做WaitForSingleObject(..., INFINITE)的操作

子线程先退出,最后主线程再退出
手机写程序 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lin_style 的回复:]
回楼上
这些问题我都想过
问题是,主,子线程完全是不搭嘎的,不强制性对它们之间做了什么进行耦合。我只想从系统API程度上关闭即可。
[/Quote]
这样设计有点怪.不过你的要求可以实现,加一个exit的event.用WaitForMultipleObjects.

15,471

社区成员

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

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