代码是个bug, 不知道为什么没人发现?

解决方案 »

  1.   


    真没看出来哪里有bug。另:谁规定必须有两个wsawaitformutipleevents的?
      

  2.   


    真没看出来哪里有bug。另:谁规定必须有两个wsawaitformutipleevents的?
    wsawaitformutipleevents中几个event都可以,是根据你设置的前两个参数定的,一个是handle数组,另一个是数组的count。
      

  3.   


    真没看出来哪里有bug。另:谁规定必须有两个wsawaitformutipleevents的?
    wsawaitformutipleevents中几个event都可以,是根据你设置的前两个参数定的,一个是handle数组,另一个是数组的count。??? 为什么引用我的话?  而且好像说的和我说的没关系吧?
      

  4.   


    真没看出来哪里有bug。另:谁规定必须有两个wsawaitformutipleevents的?
    wsawaitformutipleevents中几个event都可以,是根据你设置的前两个参数定的,一个是handle数组,另一个是数组的count。??? 为什么引用我的话?  而且好像说的和我说的没关系吧?真没看出来哪里有bug。另:谁规定必须有两个wsawaitformutipleevents的?
    wsawaitformutipleevents中几个event都可以,是根据你设置的前两个参数定的,一个是handle数组,另一个是数组的count。使用2个的原因: 
    防止  有的event 处于饥饿状态。wsawaitformutipleevents 这个api是一系列事件(事件数组)中有一个事件有信号,就返回。
    且返回最小索引。所以,一般的demo里,都会使用2个, 第一个检测 是否有信号。第2个来确定,到底是谁有信号。所以会出现一个for(int i = nindex ; nindex < 事件总数; i++)
    这样的代码。
      

  5.   

    从代码中WSAResetEvent(EventArray[dwIndex]);可以看出,它waitfor的都是手动reset的event,因此如果有多个event同时signal的话,处理完一个待循环又一次进入WSAWaitForMultipleEvents时会立即返回下一个signal的event。所以没有必要多次WaitFor (很明显代码对waitfor的顺序没有要求,哪怕同一个event signal多次造成另一个event的signal不能及时处理也是设计的一部分)。
      

  6.   


    它waitfor的都是手动reset的event,因此如果有多个event同时signal的话,处理完一个待循环又一次进入WSAWaitForMultipleEvents时会立即返回下一个event 有点神奇了
      

  7.   

    没什么可神奇的。手动event signal后必须手动reset否则一直保持signal状态。WaitForMultipleEvents/WSAWaitForMultipleEvents如果不要求全部events都signal才返回的话,如果等待的event中有任何一个是signal状态的话它当然是立即返回啦。 因此如果一次等待中有多个events都signal了,你处理时只reset了一个,那么下次wait时必然立即返回上一次signal中的另一个。