如何让Win32线程在工作队列和套接字上等待?

grr*_*sel 2 c++ winapi winsock

我需要一个客户端网络线程,以便能够响应要传输的新消息以及在网络上接收新数据.我希望避免这个线程执行轮询循环,而只是根据需要处理.

方案如下:

客户端应用程序需要通过主要但非完全同步的协议与服务器通信.通常,客户端向服务器发送消息并阻塞,直到收到响应.

服务器可以异步处理客户端请求,在这种情况下,对客户端的响应不是结果,而是处理已经开始的通知.当服务器完成客户端请求的处理时,结果消息将在以后的某个时间点发送到客户端.

异步结果通知可以随时到达客户端.这些通知在收到时需要处理,即只有在客户端再次发送时才能处理积压.

客户端网络线程接收并处理来自服务器的通知,并从客户端传输传出消息.

为了实现这一点,我需要做一个线程唤醒,以便在接收到网络数据时或者当要传输的消息入队到输入队列时执行处理.

线程如何唤醒以执行从入口处理入队工作项或数据的处理?

我主要感兴趣的是使用普通的Win32 API.

非常欢迎一个最小的例子或相关的教程!

The*_*ish 5

套接字的I/O完成端口的替代方法是使用WSAEventSelect将事件与套接字关联.然后正如其他人所说,你只需要使用另一个事件(或某种可等待的句柄)来表示何时将一个项添加到输入队列,并使用WaitForMultipleObjects等待任何一种事件.