使用MFC中的异步过程调用中断accept winsock调用

时间:2014-03-11 04:10:22

标签: c++ multithreading mfc winsock

问题很简单,

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

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

我不想使用

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

MFC提到可以通过异步过程调用中断winsock的accept函数。如果有人指出如何做到这一点,那就太好了。

1 个答案:

答案 0 :(得分:3)

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

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