4 #define TIMEOUT_1 1.0 // interval for timer1
5 #define TIMEOUT_2 3.0 // timer2 - delay timer1
6 #define TIMEOUT_3 8.2 // timer3 - pause timer1
7 #define TIMEOUT_4 11.0 // timer4 - resume timer1
8 #define TIMEOUT_5 14.0 // timer5 - change interval of timer1
9 #define TIMEOUT_6 18.0 // top timer1 and start timer7 and timer8 with changed precision
10 #define TIMEOUT_7 1.1 // interval for timer7
11 #define TIMEOUT_8 1.2 // interval for timer8
12 #define DELAY_1 3.0 // delay time for timer1 - used by timer2
13 #define INTERVAL1 2.0 // new interval for timer1 - used by timer5
15 static double _initial_time = 0;
17 struct context // helper struct to give some context to the callbacks
30 _get_current_time(void)
32 return ecore_time_get() - _initial_time;
36 _timer1_cb(void *data)
38 printf("Timer1 expired after %0.3f seconds.\n", _get_current_time());
39 return ECORE_CALLBACK_RENEW;
43 _timer2_cb(void *data)
45 struct context *ctxt = data;
46 printf("Timer2 expired after %0.3f seconds. "
47 "Adding delay of %0.3f seconds to timer1.\n",
48 _get_current_time(), DELAY_1);
50 ecore_timer_delay(ctxt->timer1, DELAY_1);
53 return ECORE_CALLBACK_CANCEL;
57 _timer3_cb(void *data)
59 struct context *ctxt = data;
60 printf("Timer3 expired after %0.3f seconds. "
61 "Freezing timer1.\n", _get_current_time());
63 ecore_timer_freeze(ctxt->timer1);
66 return ECORE_CALLBACK_CANCEL;
70 _timer4_cb(void *data)
72 struct context *ctxt = data;
73 printf("Timer4 expired after %0.3f seconds. "
74 "Resuming timer1, which has %0.3f seconds left to expire.\n",
75 _get_current_time(), ecore_timer_pending_get(ctxt->timer1));
77 ecore_timer_thaw(ctxt->timer1);
80 return ECORE_CALLBACK_CANCEL;
84 _timer5_cb(void *data)
86 struct context *ctxt = data;
87 double interval = ecore_timer_interval_get(ctxt->timer1);
89 printf("Timer5 expired after %0.3f seconds. "
90 "Changing interval of timer1 from %0.3f to %0.3f seconds.\n",
91 _get_current_time(), interval, INTERVAL1);
93 ecore_timer_interval_set(ctxt->timer1, INTERVAL1);
96 return ECORE_CALLBACK_CANCEL;
100 _timer7_cb(void *data)
102 struct context *ctxt = data;
103 printf("Timer7 expired after %0.3f seconds.\n", _get_current_time());
106 return ECORE_CALLBACK_CANCEL;
110 _timer8_cb(void *data)
112 struct context *ctxt = data;
113 printf("Timer8 expired after %0.3f seconds.\n", _get_current_time());
116 return ECORE_CALLBACK_CANCEL;
120 _timer6_cb(void *data)
122 struct context *ctxt = data;
123 printf("Timer6 expired after %0.3f seconds.\n", _get_current_time());
125 printf("Stopping timer1.\n");
127 ecore_timer_del(ctxt->timer1);
130 printf("Starting timer7 (%0.3fs) and timer8 (%0.3fs).\n",
131 TIMEOUT_7, TIMEOUT_8);
133 ctxt->timer7 = ecore_timer_add(TIMEOUT_7, _timer7_cb, ctxt);
134 ctxt->timer8 = ecore_timer_add(TIMEOUT_8, _timer8_cb, ctxt);
136 ecore_timer_precision_set(0.2);
139 return ECORE_CALLBACK_CANCEL;
143 main(int argc, char **argv)
145 struct context ctxt = {0};
149 printf("ERROR: Cannot init Ecore!\n");
153 _initial_time = ecore_time_get();
155 ctxt.timer1 = ecore_timer_add(TIMEOUT_1, _timer1_cb, &ctxt);
156 ctxt.timer2 = ecore_timer_add(TIMEOUT_2, _timer2_cb, &ctxt);
157 ctxt.timer3 = ecore_timer_add(TIMEOUT_3, _timer3_cb, &ctxt);
158 ctxt.timer4 = ecore_timer_add(TIMEOUT_4, _timer4_cb, &ctxt);
159 ctxt.timer5 = ecore_timer_add(TIMEOUT_5, _timer5_cb, &ctxt);
160 ctxt.timer6 = ecore_timer_add(TIMEOUT_6, _timer6_cb, &ctxt);
162 printf("start the main loop.\n");
164 ecore_main_loop_begin();
167 ecore_timer_del(ctxt.timer1);
169 ecore_timer_del(ctxt.timer2);
171 ecore_timer_del(ctxt.timer3);
173 ecore_timer_del(ctxt.timer4);
175 ecore_timer_del(ctxt.timer5);
177 ecore_timer_del(ctxt.timer6);
179 ecore_timer_del(ctxt.timer7);
181 ecore_timer_del(ctxt.timer8);