C. Funciones getitimer y setitimer
Como se ha explicado en la descripción de la señal SIGALARM
de la tabla 2.1, la función alarm permite controlar intervalos de
tiempo medidos en segundos. Cuando sea necesario un control más
preciso, se emplearán las funciones getitimer y
setitimer.
Con todas estas funciones, el sistema provee a cada proceso de tres
temporizadores distintos, cada uno de los cuales
va paulatinamente reduciéndose en un dominio de tiempo
diferente: tiempo real, tiempo de ejecución en modo usuario o
tiempo de ejecución en modo kernel. Cuando alguno de los
temporizadores llega a 0, se envía una señal al proceso distinta
para cada temporizador. El temporizador se restablece con un
tiempo prefijado al definirlo. El procedimiento para utilizar estos
temporizadores es:
- Definición del temporizador. Incluye, por
un lado, la declaración del tiempo en segundos y microsegundos que
el temporizador debe consumir en un principio. Por otro, se
define el valor con el que deberá inicializarse cada vez
que termine. Si este tiempo de reinicialización se define con
el valor 0, no volverá a generar más alarmas que la primera.
- Captura de la señal. Cada vez que el
temporizador llega a 0 manda una señal al proceso, de manera que el
programador utiliza la rutina de captura para ejecutar de manera
síncrona las acciones deseadas con el tipo de tiempo definido con
anterioridad.
- Reinicialización automática del
temporizador. Una vez que el temporizador genera la señal,
vuelve a comenzar el proceso de manera automática, sin que sea
necesario que el programador deba indicárselo.
La función getitimer permite obtener el tiempo del temporizador,
así como su valor de reinicialización. Su definición es:
include </sys/time.h>
int getitimer (int cual, struct itimerval *valor);
donde cual define el tipo de temporizador y valor es una variable
de tipo itimerval, en la que se recoge el valor del
tiempo inicial dado al temporizador y el tiempo de
reinicialización. Devuelve 0, si la ejecución se lleva a cabo de
forma correcta, y -1, en caso contrario; el tipo
de error queda recogido en errno.
La función setitimer permite definir el tiempo del
temporizador y su valor de reinicialización, al tiempo que devuelve
los dos valores de la configuración anterior. Su definición
es:
include </sys/time.h>
int setitimer (int cual, const struct itimerval *valor,
struct itimerval *ovalor);
donde cual y valor tienen el mismo significado que en
getitimer, y ovalor es una variable de tipo
itimerval, en la que la función devuelve el valor del
tiempo inicial y el tiempo de reinicialización de la anterior
configuración del temporizador, si ovalue es distinto
de 0. Devuelve 0, si la ejecución se lleva a cabo de forma
correcta, y -1, en caso contrario; el tipo de error
queda recogido en errno.
El atributo cual define uno de los tres tipos de temporizador y
puede tomar uno de los siguientes valores:
- ITIMER_REAL: disminuye en tiempo
real. Cuando llega a 0, genera la señal SIGALARM.
- ITIMER_VIRTUAL:
disminuye únicamente cuando el proceso se está ejecutando.
Cuando llega a 0, genera la señal SIGVTALRM.
- ITIMER_PROF: disminuye tanto si el
proceso se está ejecutando como si el sistema está actuando en
nombre del proceso. Si se considera junto a
ITIMER_VIRTUAL, permite estimar el tiempo empleado por la
aplicación en espacio de usuario y kernel. La señal que se
genera cuando llega a 0 es SIGPROF.
La estructura itimerval que define los parámetros del temporizador
se define como sigue:
struct itimerval
{
struct timeval it_interval; /* siguiente valor */
timeval it_value; /* valor actual */
};
El elemento it_value se fija con la cantidad de tiempo
restante del temporizador, o con 0, si el temporizador no
está activado. De manera análoga, en it_interval se
establece el valor de reinicialización. Los temporizadores
disminuyen el tiempo desde it_value hasta 0, generan una
señal (SIGALRM, SIGVTALRM o SIGPROF, según
el tipo de temporizador) y vuelven al valor de
reinicialización contenido en it_interval. Un temporizador
que se pone a 0 se para. Puede llegar a 0, porque
it_value sea 0, debido a que ha expirado su tiempo o a que
it_interval es igual a 0.
Información de los programas con certificado
Hay 1 opinión. Opina sobre este curso.
| Cursos | Valoración | Alumnos | Vídeo | |
|---|---|---|---|---|
|
El Ceremonial: estrategia de comunicación El protocolo Ceremonial, que se aplica en la actividad diplomática y en las ceremonias oficiales, ha ganado su espacio en el medio empresarial en los ... [06/11/09] |
|
67 | ||
|
Cambio global de la sociedad La humanidad experimenta un cambio de época, no una época de cambios. Transformaciones veloces, cualitativas y simultáneas en las relaciones de producción, relaciones de ... [24/11/06] |
|
1.697 | ||
|
Access con Visual Basic Microsoft Access con Visual Basic, aprende a crear una base de datos en Access usando Visual Basic. Veremos también cómo crear tablas e introducir... [01/07/09] |
|
4.649 | ||
Publicar en
del.icio.us
digg
meneame