我有一个套接字侦听器,它挂在 recv 函数上:
size_t recvLen = recv(sock, buf, 512, 0);
我想通过中断来终止该线程。 MSDN 说:
发出阻塞 Winsock 调用时
比如recv,Winsock可能需要等待
对于调用前的网络事件
可以完成。 Winsock 执行
在这种情况下需要警惕等待,
这可以被中断
异步过程调用 (APC)
安排在同一线程上。
我怎样才能做到这一点?
您可以通过将 APC 排队到它来中断它QueueUserAPC
。但是,终止 APC 中的线程很可能是不安全的。对 APC 进行排队并不会结束recv
,它只是中断它;一旦APC返回,它将返回等待状态recv
again.
如果你想停止recv
完全,你应该使用select
超时等待数据可用。然后,您可以检查是否应该继续等待数据或在每次超时时继续。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)