Tengo un servidor que necesita recostackr información de sus clientes. La información es un número aleatorio que almaceno en una matriz de frecuencia. El servidor debe indicar a todos los clientes el número más frecuente, pero cada 30 segundos aproximadamente. Los clientes que enviaron ese número se desconectan y dejan espacio para los nuevos. Por lo tanto, se agregan nuevos números en la matriz.
¿Cómo hago para que el servidor realice la comprobación cada 30 segundos y envíe el mensaje?
Trabajo en C bajo Unix, no en C ++.
Pruebe la siguiente lógica de pseudocódigo:
while (TRUE) { //this can be your main loop //get current time and if more than 30 seconds after last send { //get most frequent number //inform clients //get current time and store timestamp as last send }
}
Usar alarma ()
void handler(int signum) { ///your logic alarm(30); } int main(void) { signal(SIGALRM, handler); alarm(30); getchar(); return 0; }
Intente usar POSIX por temporizador de proceso: http://man7.org/linux/man-pages/man2/timer_create.2.html En la sección de ejemplos hay un ejemplo que invoca un temporizador cada 100 ns.
simplemente puede utilizar estas funciones:
int nanosleep(const struct timespec *req, struct timespec *rem); or usleep(microseconds);
Estas funciones hacen que el progtwig se duerma durante x segundos.
ejemplo
while(1) { function(); //function to run each 30 sec usleep(30*1000000); }