ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/iom.C
(Generate patch)

Comparing rxvt-unicode/src/iom.C (file contents):
Revision 1.6 by pcg, Tue Dec 2 21:49:46 2003 UTC vs.
Revision 1.7 by pcg, Fri Dec 19 06:17:03 2003 UTC

105{ 105{
106 unreg (w, cw); 106 unreg (w, cw);
107} 107}
108#endif 108#endif
109 109
110#if IOM_IDLE
111idle_watcher::~idle_watcher ()
112{
113 if (iom_valid)
114 iom.unreg (this);
115}
116
117void io_manager::reg (idle_watcher *w)
118{
119 reg (w, iw);
120}
121
122void io_manager::unreg (idle_watcher *w)
123{
124 unreg (w, iw);
125}
126#endif
127
110#if IOM_TIME 128#if IOM_TIME
111inline void set_now (void) 129inline void set_now (void)
112{ 130{
113 struct timeval tv; 131 struct timeval tv;
114 132
125#endif 143#endif
126 144
127 for (;;) 145 for (;;)
128 { 146 {
129 struct timeval *to = 0; 147 struct timeval *to = 0;
130
131#if IOM_TIME
132 struct timeval tval; 148 struct timeval tval;
133 time_watcher *w;
134 149
150#if IOM_IDLE
135 for (;tw.size ();) 151 if (iw.size ())
136 { 152 {
137 w = tw[0]; 153 tval.tv_sec = 0;
154 tval.tv_usec = 0;
155 to = &tval;
156 }
157 else
158#endif
159 {
160#if IOM_TIME
161 time_watcher *w;
138 162
139 for (time_watcher **i = tw.begin (); i < tw.end (); ++i) 163 for (;tw.size ();)
140 if ((*i)->at < w->at)
141 w = *i;
142
143 if (w->at > NOW)
144 { 164 {
165 w = tw[0];
166
167 for (time_watcher **i = tw.begin (); i < tw.end (); ++i)
168 if ((*i)->at < w->at)
169 w = *i;
170
171 if (w->at > NOW)
172 {
145 double diff = w->at - NOW; 173 double diff = w->at - NOW;
146 tval.tv_sec = (int)diff; 174 tval.tv_sec = (int)diff;
147 tval.tv_usec = (int)((diff - tval.tv_sec) * 1000000); 175 tval.tv_usec = (int)((diff - tval.tv_sec) * 1000000);
148 to = &tval; 176 to = &tval;
149 break; 177 break;
178 }
179 else if (w->at >= 0)
180 w->call (*w);
181 else
182 unreg (w);
150 } 183 }
151 else if (w->at >= 0) 184#endif
152 w->call (*w);
153 else
154 unreg (w);
155 } 185 }
156#endif
157 186
158#if IOM_CHECK 187#if IOM_CHECK
159 for (int i = 0; i < cw.size (); ++i) 188 for (int i = 0; i < cw.size (); ++i)
160 cw[i]->call (*cw[i]); 189 cw[i]->call (*cw[i]);
161#endif 190#endif
195 if (!FD_ISSET (w->fd, &wfd)) revents &= ~EVENT_WRITE; 224 if (!FD_ISSET (w->fd, &wfd)) revents &= ~EVENT_WRITE;
196 225
197 if (revents) 226 if (revents)
198 w->call (*w, revents); 227 w->call (*w, revents);
199 } 228 }
229#if IOM_IDLE
230 else if (iw.size ())
231 for (int i = 0; i < iw.size (); ++i)
232 iw[i]->call (*iw[i]);
233#endif
234
200#elif IOM_TIME 235#elif IOM_TIME
201 if (!to) 236 if (!to)
202 break; 237 break;
203 238
204 select (0, 0, 0, 0, &to); 239 select (0, 0, 0, 0, &to);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines