WaitForMultipleObjects

Hola, ¿cuál es la mejor manera de esperar más de 64 objects en WaitForMultipleObjects?. Estoy trabajando con winsock, es para manejar muchas conexiones.
Saludos
Ed

1 respuesta

Respuesta
1
Lo siento, pero no entiendo muy bien la pregunta.
El uso depende de como quieras tratar las conexiones. Por ejemplo,
si una conexión hace mucho tiempo que no recibe ni manda nada,
¿Se esperará a que termine?. Si se hace esto, no saldrás del
WaitForMultipleObjects, si el parametro fWaitAll es igual a true.
Depende del uso. ¿Me lo puedes concretar más?
Si, se trata de un servicio (sin MFC ni ATL) que usa sockets, crea un socket por cada cliente conectado y se queda esperando (para detectar llegada de datos o la desconexión del mismo). Se mantienen conectados permanentemente.
He contrato información sobre una limitación de Winsock y en general del WaitForMultipleObjects que solo espera un numero máximo de 64 objetos (FD_SETSIZE 64).
Y hay algo sobre usar waiting cascade, pero no me queda muy claro...
Muchas gracias
Ed
Creo que una solución sería:
Tener varios arrays de 64. Y hacer una llamada a WaitForMultipleObjects, por
Cada array.
HANDLE m_handleConex1[64];
HANDLE m_handleConex2[64];
HANDLE m_handleConex3[64];
WaitForMultipleObjects(64,&m_handleConex1[0],true,INFINITE);
WaitForMultipleObjects(64,&m_handleConex2[0],true,INFINITE);
WaitForMultipleObjects(64,&m_handleConex3[0],true,INFINITE);
o otra, que me parece más elegante:
HANDLE m_handleConex[MAX_CONEXIONES];
int i;
int rest;
int count=0;
for(i=0;i<MAX_CONEXIONES;i+=64)
{
WaitForMultipleObjects(64,&m_handleConex,true,INFINITE);
count+=64;
}
rest= MAX_CONEXIONES - count;
if ( res > 0 )
{
WaitForMultipleObjects(rest,&m_handleConex[count],true,INFINITE);
}
Creo que lo anterior se parece al tema de la cascada, hasta que no termine,
con 64 objectos, no espera a los siguientes.
Bueno, espero que te sirva, y si no, házmelo saber, para ver si podemos llegar
A una solución.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas