Struttura itimerspec, rimasta indietro
[gapil.git] / signal.tex
index c89302f7af6c7116dae54a59e3b39021f1e2a15e..6f93285db420917f7da41547b7e784f96e488935 100644 (file)
@@ -3165,7 +3165,6 @@ utilizzato un valore equivalente all'aver specificato \const{SIGEV\_SIGNAL}
 per \var{sigev\_notify}, \const{SIGALRM} per \var{sigev\_signo} e
 l'identificatore del timer come valore per \var{sigev\_value.sival\_int}.
 
 per \var{sigev\_notify}, \const{SIGALRM} per \var{sigev\_signo} e
 l'identificatore del timer come valore per \var{sigev\_value.sival\_int}.
 
-
 Il terzo argomento deve essere l'indirizzo di una variabile di tipo
 \type{timer\_t} dove sarà scritto l'identificativo associato al timer appena
 creato, da usare in tutte le successive funzioni di gestione. Una volta creato
 Il terzo argomento deve essere l'indirizzo di una variabile di tipo
 \type{timer\_t} dove sarà scritto l'identificativo associato al timer appena
 creato, da usare in tutte le successive funzioni di gestione. Una volta creato
@@ -3195,8 +3194,7 @@ identificatore, si pu
   
   Arma o disarma il timer POSIX.
   
   
   Arma o disarma il timer POSIX.
   
-  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$
-    in caso di errore, nel qual caso \var{errno} assumerà 
+  \bodydesc{La funzione restituisce 0 in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
   \begin{errlist}
   \item[\errcode{EINVAL}] all'interno di \param{new\_value.value} si è
     errore, nel qual caso \var{errno} assumerà uno dei seguenti valori:
   \begin{errlist}
   \item[\errcode{EINVAL}] all'interno di \param{new\_value.value} si è
@@ -3214,7 +3212,7 @@ una struttura di tipo \struct{itimerspec}, la cui definizione 
 fig.~\ref{fig:struct_itimerspec}; se il puntatore \param{old\_value} è diverso
 da \val{NULL} il valore corrente della scadenza verrà restituito in una
 analoga struttura, ovviamente in entrambi i casi le strutture devono essere
 fig.~\ref{fig:struct_itimerspec}; se il puntatore \param{old\_value} è diverso
 da \val{NULL} il valore corrente della scadenza verrà restituito in una
 analoga struttura, ovviamente in entrambi i casi le strutture devono essere
-state allocate. 
+state allocate.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -3242,13 +3240,51 @@ viene considerato come valore assoluto rispetto al valore dell'orologio a cui
   \textit{epoch}) o come un certo numero di secondi o nanosecondi rispetto
   alla partenza di un orologio di CPU.}
 
   \textit{epoch}) o come un certo numero di secondi o nanosecondi rispetto
   alla partenza di un orologio di CPU.}
 
-Il campo \var{it\_interval} consente invece di importare un allarme periodico,
-se il suo valore è nullo (se cioè sono nulli tutti e due i valori di detta
+Il campo \var{it\_interval} consente invece di impostare un allarme periodico.
+Se il suo valore è nullo (se cioè sono nulli tutti e due i valori di detta
 struttura \struct{timespec}) l'allarme scatterà una sola volta secondo quando
 indicato con \var{it\_value}, altrimenti il valore specificato verrà preso
 struttura \struct{timespec}) l'allarme scatterà una sola volta secondo quando
 indicato con \var{it\_value}, altrimenti il valore specificato verrà preso
-come estensione del periodo di ripetizione della generazione dell'allarme.
+come l'estensione del periodo di ripetizione della generazione dell'allarme.
+
+Se il timer era già stato armato la funzione sovrascrive la precedente
+impostazione, se invece si indica come prima scadenza un tempo già passato,
+l'allarme verrà notificato immediatamente e al contempo verrà incrementato il
+contatore dei superamenti. Questo contatore serve a fornire una indicazione al
+programma che riceve l'allarme su un eventuale numero di scadenze che sono
+passate prima della ricezione della notifica dell'allarme. 
+
+É infatti possibile, qualunque sia il meccanismo di notifica scelto, che
+quest'ultima venga ricevuta dopo che il timer è scaduto più di una
+volta.\footnote{specialmente se si imposta un timer con una ripetizione a
+  frequenza elevata.} Nel caso dell'uso di un segnale infatti il sistema mette
+in coda un solo segnale per timer,\footnote{questo indipendentemente che si
+  tratti di un segnale ordinario o \textit{real-time}; per questi ultimi
+  sarebbe anche possibile inviare un segnale per ogni scadenza, questo però
+  non viene fatto per evitare il rischio, tutt'altro che remoto, di riempire
+  la coda.}  e se il sistema è sotto carico o se il segnale è bloccato, prima
+della sua ricezione può passare un intervallo di tempo sufficientemente lungo
+ad avere scadenze multiple, e lo stesso può accadere anche se si usa un
+\textit{thread}. 
+
+Per questo motivo il gestore del segnale o il \textit{thread} di notifica può
+ottenere una indicazione di quante volte il time è scaduto utilizzando la
+fuzione  \funcd{timer\_getoverrun}, il cui prototipo è:
+\begin{functions}
+  \headdecl{time.h}
+
+  \funcdecl{int timer\_getoverrun(timer\_t timerid)}
+  
+  Ottiene il numero di scadenze di un timer POSIX.
+  
+  \bodydesc{La funzione restituisce il numero di scadenze di un timer (anche 0
+    se non ve ne sono) in caso di successo e $-1$ in caso di errore, nel qual
+    caso \var{errno} assumerà il valore:
+  \begin{errlist}
+  \item[\errcode{EINVAL}] \param{timerid} non indica un timer valido.
+  \end{errlist}
+}
+\end{functions}
 
 
-Se si indica un tempo 
 
 
 % TODO trattare i Posix timer, e le fuzioni:
 
 
 % TODO trattare i Posix timer, e le fuzioni: