In effetti in rete si trovano esempi complicatissimi, diciamo che i timer possono fare cose complicate (possono fare un solo colpo oppure essere ripetitivi, puoi impostare i secondi e pure i microsecondi, puoi generare segnali differenti ecc.), pero a te serve un esempio semplice.
Questo dovrebbe essere abbastanza comprensibile, l' ho provato sul Mac e funziona:
#include <signal.h>
#include <sys/time.h>
#include <iostream>
using namespace std;
void MyHandler(int data)
{
cout << "Tanti saluti dal timer" << endl;
}
int main(int argc, const char * argv[])
{
cout << "Intruduci il numero di secondi\n";
int seconds;
cin >> seconds;
cout << "Fra " << seconds << " secondi ti mando un saluto\n";
struct sigaction sa;
memset (&sa, 0, sizeof(sa)); // azzera sa
sa.sa_handler = &MyHandler; // imposta la funzione di risposta
sigaction(SIGALRM, &sa, NULL);
struct itimerval timer;
memset (&timer, 0, sizeof(timer)); // azzera timer
timer.it_value.tv_sec = seconds; // imposta i secondi
setitimer(ITIMER_REAL, &timer, NULL); // avvia il timer, chiamerà la tua funzione
cout << "Premi 'k' se vuoi terminare" << endl;
while(getchar() != 'k');
cout << "Fine\n";
return 0;
}
Nel post precedente ti avevo parlato di funzioni init_timer, add_timer che forse erano più semplici, appartengono al mondo Linux, pensavo andassero anche su Mac e invece no.
Un' altra soluzione è quella bloccante in cui fai un loop dove leggi l' orologio, la scelta dipende da cosa deve fare il tuo programma.