-
Notifications
You must be signed in to change notification settings - Fork 70
/
evtimer.xml
149 lines (146 loc) · 7.71 KB
/
evtimer.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4d17b7b4947e7819ff5036715dd706be87ae4def Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.evtimer" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Класс EvTimer</title>
<titleabbrev>EvTimer</titleabbrev>
<partintro>
<!-- {{{ EvTimer intro -->
<section xml:id="evtimer.intro">
&reftitle.intro;
<para>
Наблюдатели <classname>EvTimer</classname> — обычные относительные
таймеры, которые создают событие через заданное время и, опционально,
периодически повторяют его через заданные интервалы времени.
</para>
<para>
Таймеры базируются на реальном времени, то есть если задать таймер с
повторами раз в час и сбросить системные часы на
<emphasis>Январь прошлого года</emphasis>, то таймер будет все также
срабатывать через (примерно) час. «Примерно» потому, что обнаружить
скачки во времени сложно, а отдельные неточности неизбежны.
</para>
<para>
Callback-функция гарантированно запустится только после того, как
пройдёт превышение заданного времени ожидания (не ровно в тот же момент, т. к. на системах
с часами с низким разрешением могут наблюдаться небольшие задержки).
Если несколько таймеров будут готовы сработать в одну и ту же
итерацию событийного цикла, то callback-функции наблюдателей
будут запущены в порядке времени срабатывания и с учётом
приоритета (но это не работает, если callback-функции вызывают метод
<methodname>EvLoop::run</methodname> рекурсивно).
</para>
<para>
Сами по себе таймеры стараются всеми силами избежать накапливания ошибки,
то есть если таймер сконфигурирован срабатывать каждые
<literal>10</literal> секунд, то обычно он срабатывает точно
с <literal>10</literal> секундным интервалом. Однако, если
скрипт не поспевает за таймером, поскольку его работа занимает более
<literal>10</literal> секунд, то таймер сработает не чаще чем один раз
за итерацию событийного цикла.
</para>
</section>
<!-- }}} -->
<section xml:id="evtimer.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass>
<classname>EvTimer</classname>
</ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<classname>EvTimer</classname>
</ooclass>
<ooclass>
<modifier>extends</modifier>
<classname>EvWatcher</classname>
</ooclass>
</classsynopsisinfo>
<!-- }}} -->
<classsynopsisinfo role="comment">&Properties;</classsynopsisinfo>
<fieldsynopsis>
<modifier>public</modifier>
<varname linkend="evtimer.props.repeat">repeat</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>public</modifier>
<varname linkend="evtimer.props.remaining">remaining</varname>
</fieldsynopsis>
<classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('evwatcher.synopsis')/descendant::db:fieldsynopsis)" />
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evtimer')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[not(@role='procedural')])"/>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evtimer')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])"/>
<classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.evwatcher')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
</classsynopsis>
<!-- }}} -->
</section>
<!-- {{{ EvTimer properties -->
<section xml:id="evtimer.props">
&reftitle.properties;
<variablelist>
<varlistentry xml:id="evtimer.props.repeat">
<term>
<varname>repeat</varname>
</term>
<listitem>
<para>
Если равно <literal>0.0</literal>, то таймер автоматически остановится,
когда будет превышено время ожидания. Если больше нуля, то таймер автоматически
перейдёт в режим бесконечного повторения через заданные интервалы, пока
его не остановят самостоятельно.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="evtimer.props.remaining">
<term>
<varname>remaining</varname>
</term>
<listitem>
<para>
Возвращает время, оставшееся до срабатывания таймера. Если таймер
активен, то это время будет считаться относительно времени текущего
событийного цикла, а если таймер неактивен, то оно будет равно
сконфигурированному значению времени ожидания.
</para>
<para>
То есть, после создания экземпляра
<classname>EvTimer</classname> с параметром <parameter>after</parameter> со значением
<literal>5.0</literal> и параметром <parameter>repeat</parameter>
со значением <literal>7.0</literal>, <varname>remaining</varname>
вернёт <literal>5.0</literal>. Когда таймер запустится и пройдёт 1 секунда,
<varname>remaining</varname> вернёт <literal>4.0</literal>.
Когда таймер истечёт и будет перезапущен, он вернёт «примерно»
<literal>7.0</literal> (обычно чуть меньше, потому что запуск callback-функции занимает время)
и т. д.
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- }}} -->
</partintro>
&reference.ev.entities.evtimer;
</reference><!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->