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