我有一个套接字监听器挂在recv函数上:
size_t recvLen = recv(sock, buf, 512, 0);
Run Code Online (Sandbox Code Playgroud)
我想通过打断它来终止这个线程.MSDN说:
当发出阻塞的Winsock调用(例如recv)时,Winsock可能需要等待网络事件才能完成调用.在这种情况下,Winsock会执行可警告的等待,这可以通过在同一线程上安排的异步过程调用(APC)来中断.
我怎样才能做到这一点?
您可以通过将APC排队到它来中断它QueueUserAPC.但是,在APC中终止线程很可能是不安全的.排队APC并不会结束recv,只会中断它; 一旦APC返回,它将recv再次返回等待.
如果要recv完全停止,则应使用select超时等待数据可用.然后,您可以检查是否应继续等待数据或在每次超时时继续.