#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <time.h>

int n=0;
timer_t timerid;

void beep(sigval_t sig)
{
        struct  itimerspec timeval;

        printf("%d x %d = %d\n", n/8+2, n%8+2, (n/8+2)*(n%8+2));
        n++;

        if (n>=64) {
                memset(&timeval, 0, sizeof(timeval));
                timer_settime(timerid, 0, &timeval, NULL);
        }
}

int main(void)
{
        struct  sigevent sigev;
        struct  itimerspec timeval;
        struct  timespec ts;

        memset(&sigev, 0, sizeof(sigev));
        sigev.sigev_notify = SIGEV_THREAD;
        sigev.sigev_notify_function = beep;

        timeval.it_interval.tv_sec = 0;
        timeval.it_interval.tv_nsec = 100000000;
        timeval.it_value.tv_sec = 0;
        timeval.it_value.tv_nsec = 100000000;

        timer_create(CLOCK_MONOTONIC, &sigev, &timerid);
        timer_settime(timerid, 0, &timeval, NULL);

        ts.tv_sec = 7;
        ts.tv_nsec = 0;
        nanosleep(&ts, NULL);

        timer_delete(timerid);

        return 0;
}
