问题很简单,
我有一个守护线程等待传入的客户端连接,当至少有一个客户端连接时,它会退出。
现在,当有人调用 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/