classe timer dans linux
J'ai besoin d'une horloge pour exécuter des fonctions de rappel avec résolution relativement faible. Quelle est la meilleure façon de mettre en œuvre de tels C++ classe timer dans Linux? Existe-il des bibliothèques que je pourrais utiliser?
- Ce qui est relativement faible résolution?
- haha, Loki. exactement ce que je pensais quand j'ai lu sa question
- des centaines de quelques millisecondes à quelques secondes
- Merci @Jack, demander, j'ai été à la recherche pour la même fonctionnalité et m'a sauvé beaucoup de temps, SOF rochers \m/.
Vous devez vous connecter pour publier un commentaire.
Si vous écrivez dans un cadre (Glib, Qt, Wx, ...), vous aurez déjà une boucle avec minuterie de rappel des fonctionnalités. Je pars du principe que ce n'est pas le cas.
Si vous écrivez votre propre boucle d'événements, vous pouvez utiliser le
gettimeofday
/select
paire (struct timeval
, microseconde de précision) ou de laclock_gettime
/nanosleep
paire (struct timespec
, une précision à la nanoseconde) pour votre propre événement dispatcher. Même si le dernier de l'interface est de plus haute résolution, la planification n'est jamais que la précision de toute façon, donc prendre ce qui convient le mieux.Avertissement: j'aime C. je n'ai jamais écrit en C++. Je suis juste en faisant semblant de connaître la langue.
Avertissement: écrit tout à l'heure et non éprouvées. L'idée de base est de conserver les événements dans une file d'attente de priorité, attendre que le premier, l'exécuter et répéter.
Utiliser le boost::asio de la bibliothèque. Il a à la fois synchrone et asynchrone des minuteries qui appel une fonction de rappel.
http://www.boost.org/doc/libs/1_37_0/doc/html/boost_asio/tutorial.html
Essayer le clock_gettime() de la fonction, définie dans le temps.h:
Généralement on peut l'appeler comme ceci:
La struct timeval de l'époque.h en-tête est ce que vous cherchez. Il a le temps en secondes et nanosecondes. Donc le temps total de nanosecondes est timeval.tv_sec * 1000000 + timeval.tv_usec. Assez facile, je pense.
voici un lien pour une classe timer. u vous aurez seulement besoin de créer de la minuterie et de passer de la valeur pour le rechargement automatique ou pas. un pointeur de fonction de rappel. et si tu veux qu'il soit géré par un thread ou avec signal. si u choisir le signal avant de le u-être passer l'signo aussi.
http://timerlinux.codeplex.com/
Si tu veux en apprendre plus sur minuterie ou de signaux, il est un bon livre qui s'appelle linux programmation du système. u n'aura qu'à lire les 3 chapitres et de ses expliquant tout cela.