| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include "ptimer.h"
- static void com_ptimer_notify_function(union sigval v)
- {
- ptimer_t *ptimer = (ptimer_t *)v.sival_ptr;
- ptimer->timeout_callback(ptimer->priv);
- }
- void com_ptimer_init(ptimer_t *ptimer, const char* type, void (*timeout_callback)(void* priv), void *priv)
- {
- if (ptimer)
- {
- ptimer->priv = priv;
- ptimer->timeout_callback = timeout_callback;
- memset(&ptimer->evp, 0, sizeof(ptimer->evp));
- // ptimer->evp.sigev_value.sival_int = 3;
- ptimer->evp.sigev_value.sival_ptr = ptimer;
- ptimer->evp.sigev_notify = SIGEV_THREAD;
- ptimer->evp.sigev_notify_function = com_ptimer_notify_function;
- if (strcmp(type, "systime")==0)
- {
- if (timer_create(CLOCK_REALTIME, &ptimer->evp, &ptimer->timerid)!=0)
- {
- printe(":%p\n",ptimer);
- }
- }else{
- if (timer_create(CLOCK_MONOTONIC, &ptimer->evp, &ptimer->timerid)!=0)
- {
- printe(":%p\n",ptimer);
- }
- }
- }
- }
- void com_ptimer_reset(ptimer_t *ptimer, int start_ms, int interval_ms)
- {
- if (ptimer)
- {
- ptimer->it.it_interval.tv_sec = interval_ms/1000;
- ptimer->it.it_interval.tv_nsec = (interval_ms%1000) * 1000;
- ptimer->it.it_value.tv_sec = start_ms/1000;
- ptimer->it.it_value.tv_nsec = (start_ms%1000) * 1000;
- if (timer_settime(ptimer->timerid, TIMER_ABSTIME, &ptimer->it, NULL)!=0)
- {
- printe(":%p\n",ptimer);
- }
- }
- }
- void com_ptimer_exit(ptimer_t *ptimer)
- {
- if (ptimer)
- {
- if (timer_delete(ptimer->timerid)!=0)
- {
- printe(":%p\n",ptimer);
- }
- }
- }
|