void initTicker (Time interval, TickProc handle_tick) { itimer_interval = interval; #if defined(USE_PTHREAD_FOR_ITIMER) pthread_t tid; pthread_create(&tid, NULL, itimer_thread_func, (void*)handle_tick); #elif defined(USE_TIMER_CREATE) { struct sigevent ev; // Keep programs like valgrind happy memset(&ev, 0, sizeof(ev)); ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = ITIMER_SIGNAL; if (timer_create(CLOCK_ID, &ev, &timer) != 0) { sysErrorBelch("timer_create"); stg_exit(EXIT_FAILURE); } } install_vtalrm_handler(handle_tick); #else install_vtalrm_handler(handle_tick); #endif }
void initTicker (Time interval, TickProc handle_tick) { itimer_interval = interval; #if defined(USE_TIMER_CREATE) { struct sigevent ev; clockid_t clock; // Keep programs like valgrind happy memset(&ev, 0, sizeof(ev)); ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = ITIMER_SIGNAL; #if defined(CLOCK_MONOTONIC) clock = CLOCK_MONOTONIC; #else clock = CLOCK_REALTIME; #endif if (timer_create(clock, &ev, &timer) != 0) { sysErrorBelch("timer_create"); stg_exit(EXIT_FAILURE); } } #endif install_vtalrm_handler(handle_tick); }
void initTicker (nat ms, TickProc handle_tick) { install_vtalrm_handler(handle_tick); #if !defined(THREADED_RTS) timestamp = getourtimeofday(); #endif itimer_interval = ms; #if defined(USE_TIMER_CREATE) { struct sigevent ev; // Keep programs like valgrind happy memset(&ev, 0, sizeof(ev)); ev.sigev_notify = SIGEV_SIGNAL; ev.sigev_signo = ITIMER_SIGNAL; if (timer_create(TIMER_FLAVOUR, &ev, &timer) != 0) { sysErrorBelch("timer_create"); stg_exit(EXIT_FAILURE); } } #endif }