Monografías Plus      Agregar a favoritos      Ayuda      Português      Ingles     

POSIX - Relojes y temporizadores

Enviado por Pablo Turmero



Partes: 1, 2, 3

Monografias.com
Introducción El reloj sirve para medir el paso del tiempo Tick: Unidad del tiempo El número de ticks por segundo se puede conocer con sysconf (_SC_CLK_TCK) Resolución: Mínimo intervalo de tiempo que un reloj puede medir La Época: CUT (Coordinated Universal Time) 0 h 0 m 0s del 1 de enero de 1970
Monografias.com
Introducción Temporizador Es un objeto que puede avisar a los procesos si ha transcurrido cierta cantidad de tiempo o se ha alcanzado cierta hora Cada temporizador está asociado a un reloj Reloj del sistema Mide los segundos desde La Época Mantiene la hora Reloj de tiempo real Se usa para timeouts y temporizadores
Monografias.com
Reloj del sistema Leer la hora: #include time_t time (time_t *t); time() devuelve los segundos transcurridos desde La Época Si t es distinto de NULL en él se devuelve la hora también Alarma: #include unsigned int alarm (unsigned int seconds); Cuando transcurren los segundos especificados se envía la señal SIGALRM
Monografias.com
Ejemplo #include #include #include #include void manejador (int senal) { time_t seg; printf (“Recibida la señal de alarma ... \n”); seg = time (NULL); printf (“Segundos desde La Época: %d\n”, seg); exit (0); }
Monografias.com
Ejemplo (continuación) main() { struct sigaction accion; time_t seg; accion.sa_flags = 0; accion.sa_handler = manejador; sigemptyset (&accion.sa_mask); sigaction (SIGALRM, &accion, NULL); seg = time (NULL); printf (“Segundos desde La Época: %d\n”, seg); alarm (3); while (1); } /* Fin de main */
Monografias.com
Reloj de tiempo real La estructura timespec: typedef struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ } timespec_t; Tiempo = tv_sec * 109 + tv_nsec
Monografias.com
Manejo de relojes Cambio de hora: #include int clock_settime(clockid_t clock_id, const struct timespec *tp); Obtención de la hora: int clock_gettime(clockid_t clock_id, struct timespec *tp); Resolución del reloj: int clock_getres(clockid_t clock_id, struct timespec *res); clockid_t debe valer CLOCK_REALTIME para TR
Monografias.com
Ejemplo #include main() { struct timespec stime; clock_getres (CLOCK_REALTIME, &stime); printf (“Segundos: %d\n”, stime.tv_sec); printf (“Nanosegundos: %ld\n”, stime.tv_nsec); } /* Fin de main */
Monografias.com
Temporizadores Se utilizan para generar señales en ciertos momentos o para ejecutar acciones periódicas ¿Cómo crear un temporizador? #include #include timer_create(clockid_t clock_id,struct sigevent *evp, timer_t *timerid); sigevent indica el modo de aviso: ninguno, señal o crear y ejecutar un hilo timerid es el identificador devuelto El temporizador inicialmente no está activo
Monografias.com
Temporizadores ¿Cómo borrar un temporizador? timer_delete (timer_t timerid); ¿Cómo activar un temporizador? int timer_settime (timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); Estructura itimerspec: it_interval: periodo it_value: tiempo de expiración Si it_value vale 0 el temporizador es desactivado Si it_value > 0 el temporizador se activa en el instante especificado
Monografias.com
Temporizadores Si el temporizador ya estaba activado, se reactiva flag indica si el temporizador es absoluto o relativo Si flag = TIMER_ABSTIME, la primera expiración será cuando el reloj valga it_value Si no se especifica nada, se espera hasta empezar el tiempo definido en it_value ¿Cómo leer el valor de un temporizador? int timer_gettime (timer_t timerid, struct itimerspec *value);
Monografias.com
Ejemplo #include #include void manejador(int senal) { struct timespec stime; clock_gettime (CLOCK_REALTIME, &stime); printf (“Repeticion -> Segundos: %d\t”, stime.tv_sec); printf (“Nanosegundos: %ld\n”, stime.tv_nsec); } /* Fin de manejador */
Monografias.com
Ejemplo main() { struct sigaction accion; struct sigevent evento; timer_t idtemp; struct itimerspec itspec; struct timespec stime; accion.sa_flags = 0; accion.sa_handler = manejador; sigemptyset (&accion.sa_mask); sigaction (SIGUSR1, &accion, NULL); evento.sigev_signo = SIGUSR1; evento.sigev_notify = SIGEV_SIGNAL;
Monografias.com
Ejemplo timer_create(CLOCK_REALTIME, &evento,&idtemp); itspec.it_value.tv_sec=5;/*Activación en 5 s*/ itspec.it_value.tv_nsec = 0; itspec.it_interval.tv_sec = 1; itspec.it_interval.tv_nsec = 0; timer_settime (idtemp, 0, &itspec, NULL); clock_gettime (CLOCK_REALTIME, &stime); printf (“Comienzo -> Segundos: %d\t”, stime.tv_sec); printf (“Nanosegundos: %ld\n”, stime.tv_nsec); while(1); } /* Fin de main */
Monografias.com
Ejecución Comienzo -> Segundos: 921550145 Nanosegundos: 828803000 Repetición -> Segundos: 921550150 Nanosegundos: 828918000 Repetición -> Segundos: 921550151 Nanosegundos: 828883000 Repetición -> Segundos: 921550152 Nanosegundos: 828877000 Repetición -> Segundos: 921550153 Nanosegundos: 828891000 Repetición -> Segundos: 921550154 Nanosegundos: 828876000 Repetición -> Segundos: 921550155 Nanosegundos: 828876000 Repetición -> Segundos: 921550156 Nanosegundos: 828877000 Repetición -> Segundos: 921550157 Nanosegundos: 828878000 Repetición -> Segundos: 921550158 Nanosegundos: 828894000 Repetición -> Segundos: 921550159 Nanosegundos: 828880000 Repetición -> Segundos: 921550160 Nanosegundos: 828885000
Monografias.com
sleep() Se emplea para dormir a un proceso o a un hilo hasta que transcurran lo segundos especificados unsigned int sleep (unsigned int seconds); Existe un sleep() de alta resolución int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); Con nanosleep() se duerme hasta que transcurre el intervalo especificado o hasta que se recibe una señal rqtp es el tiempo que vamos a dormir rmtp es el tiempo que falta por dormir si se retorna por la activación de una señal
Partes: 1, 2, 3

Página siguiente 

Comentarios


Trabajos relacionados

Ver mas trabajos de Computacion

 
 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.


Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Iniciar sesión

Ingrese el e-mail y contraseña con el que está registrado en Monografias.com

   
 

Regístrese gratis

¿Olvidó su contraseña?

Ayuda