Beispiel #1
0
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
}
Beispiel #2
0
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);
}
Beispiel #3
0
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
}