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}.
 
-
 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.
   
-  \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 è
@@ -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
-state allocate. 
+state allocate.
 
 \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.}
 
-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
-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: