[C con Clase] VIDA O MUERTE
Juan Pablo Freeckman
elpibe_ en hotmail.com
Sab Feb 17 19:28:20 CET 2007
Hola gente. Mi problema es el siguiente, presente hoy una practica qe me
llevo 3 meses y me quieren suspender por no poner una instruccion en u
programa de 2500 lineas. El trozo d ecodigo vieen a ser como viene a
continuacion.
LPVOID Workerthread //hilo
{
clientesactivos++; //incremento la variable dentro del hilo.
.
.
.
funcionprincipal();
.
.
.
clientesactivos--; //la decremento cuando la funcionprincipal
acaba,es decir ,cuando l //el cliente se
desconecta
return 0;
}
main
{
.
.
.
clientesactivos = 0;
while(clientesactivos <= 4)
{ .
.
.
accept(socket........); //acepto la coenxion de un cliente
.
.
.
CreateThread(....,..,..,WorkerThread,..) //Entro en el hilo
while(clienteactivos >=4)
{sleep(10000);}
}
}
Este codigo pertenece a un servidor. y permito la entrada a 5 clientes como
maximo.necesito tener constancia de cuantos clientes hay conectados con la
variable global cilentesactivos.El sexto cliente no debe conectarse y si se
descoencta alguno de los 5, debe poderse admitir a otro cliente
El tema es que permito la entrada a funcionprincipal() a clientes que he
permitido el acceso al hilo. Clientesactivos es un variable que se incremeta
y decrementa dentro del hilo, y conozco su valor en "tiempo real" en el
main. Si tengo 5 clientes conectados, el main queda en el bucle que ejecuta
la funcion sleep, y sale de el cuando es inferior a 4(cuando se desconecta
algun cliente). Mi profesor no entiende bien el codigo. Dice q tenia q haber
introducido esaa variable en una seccion critica por que su valor se ve
afectado entre hilos, pero yo creo q no importa eso. me quiere catear por
esa pijada a pesar de que funciona bien, y encima no creo q este en lo
cierto. No creo q exista alguna situacion q se me puedan conectar mas o
menos clientes, que opinais?steven?
_________________________________________________________________
Horóscopo, tarot, numerología... Escucha lo que te dicen los astros.
http://astrocentro.msn.es/
Más información sobre la lista de distribución Cconclase