Ho sempre notato che le persone hanno reazioni diverse ai diversi modi di creare un timer in UNIX.Il modo migliore per fare un timer in UNIX
Conosco un paio di modi diversi che ho potuto fare un evento eseguire ogni X secondi all'interno di UNIX:
- si può fare un thread di polling - pthread_t con posti letto;
- si può fare un select() con un timeout;
- e credo che sia possibile utilizzare il sistema operativo in pochi altri modi.
Qualcuno può fornire qualche codice di esempio con il "migliore" o il modo più efficiente per fare un timer e una descrizione del perché è il migliore? Mi piacerebbe usare il meccanismo più efficiente per questo, ma non sono sicuro di quale sia!
Per i nostri scopi, basta far finta che stai stampando "Ciao Mondo!" una volta ogni 10 secondi.
NOTA: Non ho TR1/Boost/ecc. su questo sistema, quindi ti preghiamo di tenerlo in linea con le chiamate di sistema C/C++ e UNIX. Ci scusiamo per non averlo menzionato per la prima volta :)
programmazione a thread singolo è più facile che un concorrente, quindi se si può garantire che le chiamate normali non superano l'intervallo, mi piacerebbe andare con un semplice timeout (come con 'select()'). Avrai bisogno del multithreading, tuttavia, se le chiamate stesse impiegano più tempo e il tuo timer deve sparare nuovamente prima che le chiamate ritornino. –
Il sistema utilizza già molto il multithreading, quindi non sarebbe un problema. Lanciati come risposta :) –
Hm, non ho davvero nulla da dire sulla domanda vera e propria. Ho usato boost.asio per le mie esigenze di temporizzazione prima (con il ciclo ioservice in esecuzione in un thread separato), ma non riesco a parlare con i vantaggi comparativi dei vari approcci ... –