MyException - 我的异常网
当前位置:我的异常网» VC/MFC » WaitForSingleObject和WSAEventSelcet以及WSACreate

WaitForSingleObject和WSAEventSelcet以及WSACreateEvent的有关问题

www.myexceptions.net  网友分享于:2013-04-10  浏览:3次
WaitForSingleObject和WSAEventSelcet以及WSACreateEvent的问题?
本帖最后由 VisualEleven 于 2011-11-24 19:07:02 编辑
代码如下:
WSAEVENT event = ::WSACreateEvent();
::WSAEventSelect(sListen, event, FD_ACCEPT|FD_CLOSE);

::InitializeCriticalSection(&g_cs);

// 处理客户连接请求,打印状态信息
while(TRUE)
{
               int nRet = ::WaitForSingleObject(event, 5*1000);

               ::ResetEvent(event);
               // 循环处理所有未决的连接请求
                while(TRUE)

               .................................
          }
这段代码我看不太懂,WSACreateEvent()创建的是一个人工重置的事件,且创建后是无信号的,既然是无信号状态,那WaitForSingleObject如何能等的到这个事件对像呢?难道是WSAEventSelect函数能把它变成有信号状态?
网上对WSAEventSelect的说明是:
Windows Sockets应用程序在创建套接字后,调用WSAEventSelect()函数,将一个事件对象与网络事件集合关联在一起。当网络事件发生时,应用程序以事件的形式接收网络事件通知。 
难道这个和event事件对象是不是有信号状态没有关系?并且他还能让event事件对象变成有信号状态?

我这种理解对不对额?不对的话大侠帮我纠正一下。
哎呀,分都没了,本想多给点。

------解决方案--------------------
是的wsaeventselect函数,当 FD_ACCEPT
------解决方案--------------------
FD_CLOSE 你这2个事件发生后就可以把event改成有信号了,

还有是不是应该把WSAEventSelect也写到while里才对呢
------解决方案--------------------
这个是通过socket的异步事件模型,当你绑定的socket对应的FD_CLOSE事件发生时候,你的event就自然从无信号变为有信号了。

------解决方案--------------------
引用:
引用:这个是通过socket的异步事件模型,当你绑定的socket对应的FD_CLOSE事件发生时候,你的event就自然从无信号变为有信号了。
你的意思也就是说只有当有客户请求连接的时候,::WSAEventSelect(sListen, event, FD_ACCEPT
------解决方案--------------------
FD_CLOSE);就变成有信号状态,如果没有请求,也就没信……



恩恩

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有