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);), то віртуальний інтервальний таймер не спрацює через те, що процес буде перебувати в стані очікування вводу (тобто — процес буде неактивним).

Див. також[ред. | ред. код]