在 MFC 中使用异步过程调用中断接受 winsock 调用
Posted
技术标签:
【中文标题】在 MFC 中使用异步过程调用中断接受 winsock 调用【英文标题】:Interrupt a accept winsock call with Asynchronous Procedure calls in MFC 【发布时间】:2014-03-11 04:10:22 【问题描述】:问题很简单,
我有一个守护线程等待传入的客户端连接,当至少一个客户端连接时,它会退出。
现在,当有人调用shutdownApp函数时,我需要将信号(或中断)发送到守护线程并要求它退出阻塞接受,以便它可以退出。
我不想用
1) 选择(或非阻塞线程) 2) 终止线程
MFC 提到可以通过异步过程调用来中断winsock 的接受函数。如果有人对如何做到这一点有指导,那就太好了。
【问题讨论】:
【参考方案1】:只需关闭正在调用accept()
的套接字。这将导致accept()
失败并出现错误代码,然后线程可以检查该错误代码。如果您更仔细地阅读文档,它会提到 APC 可以提前中止 accept()
,以警告您不要在 APC 仍在运行时再次调用 accept()
。这并不意味着您应该故意使用 APC 中止accept()
,这是错误的解决方案。
如果您不想关闭套接字,请在循环中使用select()
。它适用于阻塞和非阻塞套接字,并会告诉您何时调用accept()
,因此它不会阻塞。指定超时,以便您的线程可以定期唤醒以查找终止条件,然后再次调用 select()
。
【讨论】:
以上是关于在 MFC 中使用异步过程调用中断接受 winsock 调用的主要内容,如果未能解决你的问题,请参考以下文章