etisserant@49: #include etisserant@49: #include etisserant@49: #include etisserant@49: #include etisserant@49: etisserant@49: etisserant@53: void PLC_timer_notify(sigval_t val) etisserant@49: { etisserant@49: struct timespec CURRENT_TIME; etisserant@49: clock_gettime(CLOCK_REALTIME, &CURRENT_TIME); etisserant@49: __run(); etisserant@49: } etisserant@49: etisserant@49: void catch_signal(int sig) etisserant@49: { etisserant@49: signal(SIGTERM, catch_signal); etisserant@49: signal(SIGINT, catch_signal); etisserant@49: printf("Got Signal %d\n",sig); etisserant@49: } etisserant@49: etisserant@49: int main(int argc,char **argv) etisserant@49: { etisserant@49: timer_t timer; etisserant@49: struct sigevent sigev; etisserant@49: long tv_nsec = 1000000 * (maxval(common_ticktime__,1)%1000); etisserant@49: time_t tv_sec = common_ticktime__/1000; etisserant@49: struct itimerspec timerValues; etisserant@49: etisserant@49: memset (&sigev, 0, sizeof (struct sigevent)); etisserant@49: memset (&timerValues, 0, sizeof (struct itimerspec)); etisserant@49: sigev.sigev_value.sival_int = 0; etisserant@49: sigev.sigev_notify = SIGEV_THREAD; etisserant@49: sigev.sigev_notify_attributes = NULL; etisserant@53: sigev.sigev_notify_function = PLC_timer_notify; etisserant@49: timerValues.it_value.tv_sec = tv_sec; etisserant@49: timerValues.it_value.tv_nsec = tv_nsec; etisserant@49: timerValues.it_interval.tv_sec = tv_sec; etisserant@49: timerValues.it_interval.tv_nsec = tv_nsec; etisserant@49: etisserant@49: __init(); etisserant@49: etisserant@49: timer_create (CLOCK_REALTIME, &sigev, &timer); etisserant@49: timer_settime (timer, 0, &timerValues, NULL); etisserant@49: etisserant@49: /* install signal handler for manual break */ etisserant@49: signal(SIGTERM, catch_signal); etisserant@49: signal(SIGINT, catch_signal); etisserant@49: etisserant@49: pause(); etisserant@49: etisserant@49: timer_delete (timer); etisserant@49: etisserant@49: __cleanup(); etisserant@49: etisserant@49: return 0; etisserant@49: }