uIP 1.0
|
00001 /** 00002 * \addtogroup timer 00003 * @{ 00004 */ 00005 00006 /** 00007 * \file 00008 * Библиотечная реализация таймера. 00009 * \author 00010 * Adam Dunkels <adam@sics.se> 00011 */ 00012 00013 /* 00014 * Copyright (c) 2004, Swedish Institute of Computer Science. 00015 * Все права зарезервированы. * 00016 * Повторное распространение, использование в исходном и двоичном виде, 00017 * с модификацией или без - разрешается, если выполняются следующие 00018 * условия: 00019 * 1. Распространение исходного кода должно сохранить вышеуказанную пометку 00020 * копирайта, этот список условий и следующую правовую оговорку. 00021 * 2. Распространение исходного кода должно сохранить вышеуказанную пометку 00022 * копирайта, этот список условий и следующую правовую оговорку в 00023 * документации и/или других материалах, которые будут предоставлены 00024 * вместе с распространяемыми материалами. 00025 * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть 00026 * продукты, написанные с использованием этого программного обеспечения 00027 * без специального на то разрешения. 00028 * 00029 * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ 00030 * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ, 00031 * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ 00032 * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН 00033 * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ 00034 * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ 00035 * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ; 00036 * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, 00037 * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ 00038 * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ 00039 * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ 00040 * ТАКОГО ПОВРЕЖДЕНИЯ. 00041 * 00042 * Этот файл является частью стека uIP TCP/IP. 00043 * 00044 * Author: Adam Dunkels <adam@sics.se> 00045 * 00046 * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $ 00047 */ 00048 00049 #include "clock.h" 00050 #include "timer.h" 00051 00052 /*---------------------------------------------------------------------------*/ 00053 /** 00054 * Установка таймера. 00055 * 00056 * Эта функция используется для установки таймера на некоторое время 00057 * в будущем. Функция timer_expired() будет вычислена как true после 00058 * того, как время таймера истечет. 00059 * 00060 * \param t Указатель на таймер 00061 * \param interval Интервал времени, на которое настроен таймер. 00062 * 00063 */ 00064 void 00065 timer_set(struct timer *t, clock_time_t interval) 00066 { 00067 t->interval = interval; 00068 t->start = clock_time(); 00069 } 00070 /*---------------------------------------------------------------------------*/ 00071 /** 00072 * Сброс таймера на тот же самый интервал времени. 00073 * 00074 * Эта функция запускает таймер заново на тот же интервал, который был 00075 * установлен функцией timer_set(). Стартовая точка интервала та же самая, 00076 * которая была в тот момент, когда таймер последний раз истек. Таким 00077 * образом, функция делает таймер стабильным во времени, в отличие от 00078 * функции timer_restart(). 00079 * 00080 * \param t Указатель A pointer to the timer. 00081 * 00082 * \sa timer_restart() 00083 */ 00084 void 00085 timer_reset(struct timer *t) 00086 { 00087 t->start += t->interval; 00088 } 00089 /*---------------------------------------------------------------------------*/ 00090 /** 00091 * Рестарт таймера от текущей точки времени. 00092 * 00093 * Эта функция перезапускает таймер на тот же интервал, который был 00094 * установлен вызовом функции timer_set(). Таймер запустится начиная с 00095 * текущего времени. 00096 * 00097 * \note Периодический таймер имеет дрожание интервала, если эта функция 00098 * используется для его сброса. Для периодических таймеров вместо этой 00099 * функции используйте функцию timer_reset(). 00100 * 00101 * \param t Указатель на таймер. 00102 * 00103 * \sa timer_reset() 00104 */ 00105 void 00106 timer_restart(struct timer *t) 00107 { 00108 t->start = clock_time(); 00109 } 00110 /*---------------------------------------------------------------------------*/ 00111 /** 00112 * Проверка - истек ли интервал таймера. 00113 * 00114 * Эта функция проверяет, истек ли таймер, и возвратит true (истек) или 00115 * false (еще не истек) в зависимости от его состояния. 00116 * 00117 * \param t Указатель на таймер. 00118 * 00119 * \return Не 0, если установленное время таймера истекло, иначе 0. 00120 * 00121 */ 00122 int 00123 timer_expired(struct timer *t) 00124 { 00125 return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval; 00126 } 00127 /*---------------------------------------------------------------------------*/ 00128 00129 /** @} */