SIGVTALRM — Вікіпедія

SIGVTALRM
ОписВичерпання віртуального таймера (може бути перехопленим або проігнорованим)
Дія за замовчуваннямЗавершує процес
SA_SIGINFO macros
None


SIGVTALRMсигнал на POSIX-сумісних платформах, який посилається в процесу при вичерпанні віртуального таймера. Символьна змінна SIGVTALRM оголошена у заголовному файлі signal.h. Символьні імена для процесів використовуються через те, що їхні номери залежать від конкретної платформи.

Етимологія

[ред. | ред. код]

SIG є загальноприйнятий префіксом для назв сигналів. VT (англ. virtual) — віртуальний, ALRM (англ. alarm) — тривога, сигнал будильника.

Використання

[ред. | ред. код]

Віртуальний інтервальний таймер може бути встновлений через системний виклик setitimer().

Віртуальний інтервальний таймер виконує відлік часу лише тоді, коли процес є активним. На відміну від нього (невіртуальний) інтервальний таймер, виконує відлік реального часу. Це значить, що на процесі, який знаходиться в стані очікування (спить), віртуальний інтервальний таймер буде зупиненим.

Приклад

[ред. | ред. код]

Програма мовою C, яка активує обробник віртуального таймера через 2 секунди від початку своєї роботи і надалі — через кожні 0.25 секунди:

#include <stdio.h> #include <signal.h> #include <sys/time.h>  void alarm_handler(int sig) {   printf("vt alarm! %d\n", sig); }  int main(int argc, char *argv[]) {   signal(SIGVTALRM, alarm_handler);     /* встановлюємо обробник */   struct itimerval timer;   timer.it_value.tv_sec = 2;   timer.it_value.tv_usec = 0;   timer.it_interval.tv_sec = 0;   timer.it_interval.tv_usec = 250000;   setitimer(ITIMER_VIRTUAL, &timer, NULL);   while(1);   // getc(stdin);   return 0; } 

Якщо нескінчений цикл (while(1);) замінити на введення зі стандартного пристрою з очікуванням (getc(stdin);), то віртуальний інтервальний таймер не спрацює через те, що процес буде перебувати в стані очікування вводу (тобто — процес буде неактивним).

Див. також

[ред. | ред. код]