在 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 调用的主要内容,如果未能解决你的问题,请参考以下文章

MFC应用程序关闭后异常中断

在ucos中 我使用了CAN的接受中断 程序就一直执行中断,不去执行任务,然后不喂狗超时重启,这个怎么解决

mfc通过调用dll文件弹出对话框时出现中断

中断,异常和系统调用

在c ++中没有断点的中断进程

Linux串口编程(中断方式和select方式)