c++ - 使用 MFC 中的异步过程调用中断接受 winsock 调用

标签 c++ multithreading mfc winsock

问题很简单,

我有一个守护线程等待传入的客户端连接,当至少有一个客户端连接时,它会退出。

现在,当有人调用 shutdownApp 函数时,我需要向守护线程发送信号(或中断)并要求它从阻塞接受中退出,以便它可以退出。

我不想用

1) 选择(或非阻塞线程)
2) 终止线程

MFC 提到可以通过异步过程调用中断 winsock 的接受函数。如果有人对如何操作有指示,那就太好了。

最佳答案

只需关闭正在调用 accept() 的套接字。这将导致 accept() 失败并返回线程可以检查的错误代码。如果您更仔细地阅读文档,它会提到 APC 可以提前中止 accept() 以警告您不要在 APC 仍在运行时再次调用 accept()。这并不意味着您应该故意使用 APC 来中止 accept(),这是错误的解决方案。

如果您不想关闭套接字,则在循环中使用select()。它适用于阻塞和非阻塞套接字,并会告诉您何时调用 accept() 因此它不会阻塞。指定超时,以便您的线程可以定期唤醒以在再次调用 select() 之前查找终止条件。

关于c++ - 使用 MFC 中的异步过程调用中断接受 winsock 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22316298/

相关文章:

c++ - 检查系统中的可用内存以进行新分配

c# - 如何通过引用将 float 从 C++ 传递回 C#?

C++ SEH - EXCEPTION_DISPOSITION 枚举和 __except() 过滤器表达式之间的相关性

java - 不可能的Java内存一致性错误

c++ - openmp parallel for with non-PODs

c++ - C++11 中的递归 lambda 实现

java - 如果我们无论如何都要同步函数,为什么还需要信号量

c# - Shell命名空间扩展。 C#。 C++,MFC,AT-使用什么?

c++ - 如何使用 WTL 获取编辑控件的内容?

c++ - 删除通过 ExtTextOut 函数绘制的文本