\hypertarget{ecore_timer_example_8c-example}{}\section{ecore\+\_\+timer\+\_\+example.\+c}
This example shows how to use timers to have timed events inside ecore.\+See \mbox{\hyperlink{ecore_timer_example_c}{the example explained}}.


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{comment}{//Compile with:}}
\DoxyCodeLine{\textcolor{comment}{// gcc -o ecore\_timer\_example ecore\_timer\_example.c `pkg-config --libs --cflags ecore`}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <Ecore.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <unistd.h>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_1 1.0 // interval for timer1}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_2 3.0 // timer2 - delay timer1}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_3 8.2 // timer3 - pause timer1}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_4 11.0 // timer4 - resume timer1}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_5 14.0 // timer5 - change interval of timer1}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_6 18.0 // top timer1 and start timer7 and timer8 with changed precision}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_7 1.1 // interval for timer7}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define TIMEOUT\_8 1.2 // interval for timer8}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define DELAY\_1   3.0 // delay time for timer1 - used by timer2}}
\DoxyCodeLine{\textcolor{preprocessor}{\#define INTERVAL1 2.0 // new interval for timer1 - used by timer5}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{double} \_initial\_time = 0;}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{struct }context   \textcolor{comment}{// helper struct to give some context to the callbacks}}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer1;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer2;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer3;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer4;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer5;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer6;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer7;}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf96ffb609956658ec038e54bd39f46f0}{Ecore\_Timer}} *timer8;}
\DoxyCodeLine{\};}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \textcolor{keywordtype}{double}}
\DoxyCodeLine{\_get\_current\_time(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Time__Group_ga98f2439b5d3e7114a75bfe2f0c22c4e9}{ecore\_time\_get}}() - \_initial\_time;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer1\_cb(\textcolor{keywordtype}{void} *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer1 expired after \%0.3f seconds.\(\backslash\)n"}, \_get\_current\_time());}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga1ee9db07f9a46a8b20fb83e1c6dbed09}{ECORE\_CALLBACK\_RENEW}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer2\_cb(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context *ctxt = data;}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer2 expired after \%0.3f seconds. "}}
\DoxyCodeLine{          \textcolor{stringliteral}{"Adding delay of \%0.3f seconds to timer1.\(\backslash\)n"},}
\DoxyCodeLine{          \_get\_current\_time(), DELAY\_1);}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_ga74a51cf0c7f07f1b48cac29cef5e8817}{ecore\_timer\_delay}}(ctxt->timer1, DELAY\_1);}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer2 = NULL;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer3\_cb(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context *ctxt = data;}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer3 expired after \%0.3f seconds. "}}
\DoxyCodeLine{          \textcolor{stringliteral}{"Freezing timer1.\(\backslash\)n"}, \_get\_current\_time());}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_ga9fb759297c1c828cafe5c3ccc1a2614b}{ecore\_timer\_freeze}}(ctxt->timer1);}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer3 = NULL;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer4\_cb(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context *ctxt = data;}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer4 expired after \%0.3f seconds. "}}
\DoxyCodeLine{          \textcolor{stringliteral}{"Resuming timer1, which has \%0.3f seconds left to expire.\(\backslash\)n"},}
\DoxyCodeLine{          \_get\_current\_time(), \mbox{\hyperlink{group__Ecore__Timer__Group_gae07617b24116e69c9c973387c8c5f396}{ecore\_timer\_pending\_get}}(ctxt->timer1));}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaa026b898456329411d043f36170ad644}{ecore\_timer\_thaw}}(ctxt->timer1);}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer4 = NULL;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer5\_cb(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context *ctxt = data;}
\DoxyCodeLine{   \textcolor{keywordtype}{double} interval = \mbox{\hyperlink{group__Ecore__Timer__Group_ga2be02360c275de1390b1f602dbc307cf}{ecore\_timer\_interval\_get}}(ctxt->timer1);}
\DoxyCodeLine{}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer5 expired after \%0.3f seconds. "}}
\DoxyCodeLine{          \textcolor{stringliteral}{"Changing interval of timer1 from \%0.3f to \%0.3f seconds.\(\backslash\)n"},}
\DoxyCodeLine{          \_get\_current\_time(), interval, INTERVAL1);}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_ga4d8f44e32858827d09866efba5e0ad35}{ecore\_timer\_interval\_set}}(ctxt->timer1, INTERVAL1);}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer5 = NULL;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer7\_cb(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context *ctxt = data;}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer7 expired after \%0.3f seconds.\(\backslash\)n"}, \_get\_current\_time());}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer7 = NULL;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer8\_cb(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context *ctxt = data;}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer8 expired after \%0.3f seconds.\(\backslash\)n"}, \_get\_current\_time());}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer8 = NULL;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_timer6\_cb(\textcolor{keywordtype}{void} *data)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context *ctxt = data;}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Timer6 expired after \%0.3f seconds.\(\backslash\)n"}, \_get\_current\_time());}
\DoxyCodeLine{}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Stopping timer1.\(\backslash\)n"});}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt->timer1);}
\DoxyCodeLine{   ctxt->timer1 = NULL;}
\DoxyCodeLine{}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"Starting timer7 (\%0.3fs) and timer8 (\%0.3fs).\(\backslash\)n"},}
\DoxyCodeLine{          TIMEOUT\_7, TIMEOUT\_8);}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer7 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_7, \_timer7\_cb, ctxt);}
\DoxyCodeLine{   ctxt->timer8 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_8, \_timer8\_cb, ctxt);}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Timer__Group_gaf7d0f56778f5614c63a69d4cfbee7b3d}{ecore\_timer\_precision\_set}}(0.2);}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt->timer6 = NULL;}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gae0c653baad8836232c0dc27f91f875d6}{ECORE\_CALLBACK\_CANCEL}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int}}
\DoxyCodeLine{main(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \textcolor{keyword}{struct }context ctxt = \{0\};}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Ecore__Init__Group_ga77757609684a2c922dc5ec398274751b}{ecore\_init}}())}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        printf(\textcolor{stringliteral}{"ERROR: Cannot init Ecore!\(\backslash\)n"});}
\DoxyCodeLine{        \textcolor{keywordflow}{return} -1;}
\DoxyCodeLine{     \}}
\DoxyCodeLine{}
\DoxyCodeLine{   \_initial\_time = \mbox{\hyperlink{group__Ecore__Time__Group_ga98f2439b5d3e7114a75bfe2f0c22c4e9}{ecore\_time\_get}}();}
\DoxyCodeLine{}
\DoxyCodeLine{   ctxt.timer1 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_1, \_timer1\_cb, \&ctxt);}
\DoxyCodeLine{   ctxt.timer2 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_2, \_timer2\_cb, \&ctxt);}
\DoxyCodeLine{   ctxt.timer3 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_3, \_timer3\_cb, \&ctxt);}
\DoxyCodeLine{   ctxt.timer4 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_4, \_timer4\_cb, \&ctxt);}
\DoxyCodeLine{   ctxt.timer5 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_5, \_timer5\_cb, \&ctxt);}
\DoxyCodeLine{   ctxt.timer6 = \mbox{\hyperlink{group__Ecore__Timer__Group_ga7b9cb9d24ecebfdbb957436e2e669402}{ecore\_timer\_add}}(TIMEOUT\_6, \_timer6\_cb, \&ctxt);}
\DoxyCodeLine{}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"start the main loop.\(\backslash\)n"});}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gaf103b9f668bb3e4fed12e52c6180132d}{ecore\_main\_loop\_begin}}();}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer1)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer1);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer2)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer2);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer3)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer3);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer4)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer4);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer5)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer5);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer6)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer6);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer7)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer7);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (ctxt.timer8)}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Timer__Group_gaba2b599c7aabe3ab664dc3d47f62a33a}{ecore\_timer\_del}}(ctxt.timer8);}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Init__Group_ga768298b932f18d7e7593a447493e5cde}{ecore\_shutdown}}();}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} 0;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\end{DoxyCodeInclude}
 