Habilidades de funcionamiento de la función setitimer de Linux

  
                

El sistema Linux que utiliza la función setitimer puede ser una función de sincronización de alta precisión, que se utiliza para ejecutar funciones con regularidad. Las siguientes series pequeñas le darán una introducción detallada al uso de la función setitimer. Veamos esto.

Descripción: setitimer un proceso sólo puede tener un tiempo antes de la próxima será cubierto por una más temporizadores sólo puede pensar en un proceso para lograr su propia cuenta.

setitimer () no admite varios usos simultáneos en el mismo proceso para admitir varios temporizadores.

El temporizador relacionado con Linux (setitimer) se describe a continuación:

El sistema Linux proporciona tres temporizadores para cada proceso, cada uno de los cuales cuenta en su propio dominio diferente. Cuando cualquier temporizador cuenta, el sistema envía una señal al proceso y el contador se reinicia.

Se admite un total de los siguientes tres formularios de contador:

ITIMER_REAL El contador se reduce en 1 en tiempo real, y luego se envía la señal SIGALRM después de comparar el recuento.

ITIMER_VIRTUAL Cuando el proceso cuenta durante la ejecución, la señal SIGVTALRM se envía al proceso cuando se completa la cuenta.

ITIMER_PROF cuenta cuando el proceso se ejecuta y el sistema se ejecuta en nombre del proceso

[llamada del sistema getitimer /setitimer]

Descripción:

Obtener o establecer el valor del temporizador de intervalo. El sistema proporciona tres tipos de temporizadores para el proceso, cada clase disminuye su valor en un dominio de tiempo diferente. Cuando el temporizador expira, la señal se envía al proceso, después de lo cual el temporizador se reinicia.

Uso:

#include "sys /time.h"

int getitimer (int which, struct itimerval * value);

int setitimer ( Int que, const struct itimerval * value, struct itimerval * ovalue);

Parámetros:

que: Tipo de temporizador intermitente, hay tres opciones

ITIMER_REAL //El valor es 0, el valor del temporizador disminuye en tiempo real y la señal enviada es SIGALRM.

ITIMER_VIRTUAL //El valor es 1, el valor del temporizador disminuye cuando se ejecuta el proceso y la señal enviada es SIGVTALRM.

ITIMER_PROF //El valor es 2, el valor del temporizador disminuye durante el proceso y la ejecución del sistema, y ​​la señal enviada es SIGPROF.

valor, ovalue: parámetro de tiempo, el prototipo es el siguiente

struct itimerval

{

struct timeval it_interval;

struct timeval it_value;

};

struct timeval

{

long tv_sec;

long tv_usec; ​​

}; < Br>

getitimer () rellena la estructura señalada por valor con el valor actual del temporizador.

setitimer () establece la estructura apuntada por valor al valor actual del temporizador. Si ovalue no es NULL, devolverá el valor original del temporizador.

Descripción de devolución:

Devuelve 0 cuando se ejecuta correctamente. Error al devolver -1, errno se establece en uno de los siguientes valores

EFAULT: value o ovalue es un puntero que no es válido

EINVAL: su valor no es uno de ITIMER_REAL, ITIMER_VIRTUAL o ITIMER_PROF

#include "stdio.h"

#include "unistd.h"

#include "signal.h"

#include "string.h"

#include "sys /time.h"

#include "errno.h"

void PrintMsg (int Num)

{

printf ("% s /n ", " Hello World ");

return;

}

int main (int argc, char * argv [])

{

señal (SIGALRM, PrintMsg);

struct itimerval tick;

tick.it_value.tv_sec = 10; //10 El temporizador se iniciará después de un segundo

tick.it_value.tv_usec = 0;

tick.it_interval.tv_sec = 1; //Después de que se inicie el temporizador, cada 1 segundo ejecutará el correspondiente Función

tick.it_interval.tv_usec = 0;

//setitimer activará la señal SIGALRM

int ret = setitimer (ITIMER_REAL, &tick, NULL);

if (ret! = 0)

{

printf (" Error del temporizador de configuración.% s /n ", strerror (errno));

return -1;

}

printf (" ¡Espere! /N ");

getchar ();

return 0;

}

Lo anterior es el uso de la función setitimer en Linux. La función setitimer tiene tres tipos de selecciones de temporizador. Para lograr una sincronización de mayor precisión, es mejor elegir la función setitimer.

Copyright © Conocimiento de Windows All Rights Reserved