问题很简单,
我有一个守护程序线程,它等待传入的客户端连接,当至少一个客户端连接时,它退出。
现在,当有人调用shutdownApp函数时,我需要将信号(或中断)发送到守护程序线程并要求它退出阻塞接受,以便它可以退出。
我不想用
1)选择(或非阻塞线程) 2)TerminateThread
MFC提到可以通过异步过程调用中断winsock的accept函数。如果有人指出如何做到这一点,那就太棒了。
只需关闭正在调用accept()
的套接字即可。这将导致accept()
失败,并返回一个错误代码,然后线程可以检查该错误代码。如果你仔细阅读文档,它会提到APC可以过早地中止accept()
,以警告你在APC仍在运行时再次调用accept()
。这并不意味着你应该故意使用APC来中止accept()
,这是错误的解决方案。
如果您不想关闭套接字,请在循环中使用select()
。它适用于阻塞和非阻塞套接字,并会告诉您何时调用accept()
以便它不会阻塞。指定超时,以便在再次调用select()
之前,您的线程可以定期唤醒以查找终止条件。