besoin d'appeler une fonction périodique à des intervalles de temps en c++
Je suis en train d'écrire un programme en c++ où j'ai besoin d'appeler une fonction périodique à des intervalles de temps, disons tous les 10ms. Je n'ai jamais fait quoi que ce soit lié au temps ou les horloges en c++, est-ce un moyen rapide et facile de problème ou de l'un de ceux où il n'y a pas de solution élégante?
Merci!
<chrono>
a cette prise en charge.
OriginalL'auteur Execut1ve | 2014-01-11
Vous devez vous connecter pour publier un commentaire.
Une simple minuterie peut être mis en œuvre comme suit,
Cette solution simple n'offre pas un moyen pour arrêter la minuterie. La minuterie continue à fonctionner jusqu'à ce que le programme est sorti.
Malheureusement, votre solution ne pourra pas faire ce qu'il a demandé. Il exécutera
func
avecinterval
retard entre les appels. Il ne sera pas exécutéfunc
chaqueinterval
. Si lefunc
peut prendre un certain temps variable pour exécuter des temps de démarrage varient également.OriginalL'auteur user534498
Pour compléter la question, le code de @user534498 peut être facilement adapté pour avoir le périodique tique intervalle.
Il est juste nécessaire de déterminer la prochaine heure de début point à l'entrée de la minuterie boucle de fil et
sleep_until
que point de temps après l'exécution de la fonction.func()
doit se terminer avant la fin desleep_until
!OriginalL'auteur florgeng
Vous pourriez regarder dans filetage:
Voici un intervalle de temps contrôlé fonction implémentée en C, en utilisant des pthreads.h, il devrait être un simple port de C++.
L'exécution d'une fonction à intervalles spécifiques
OriginalL'auteur JMercer
Cela dépend de ce que vous feriez sur par intervalle - l'affichage de l'heure/ticker ou quelque chose d'autre, à l'endroit précis de l'écran/forme. Ou vous pouvez avoir besoin d'envoyer régulièrement des données pour certains la machine connectée (sur une douille ou un tuyau). Avez-vous vraiment besoin de 10 précision à la milliseconde?
En fonction des besoins, en particulier l'exigence de précision, vous pouvez avoir thread dédié pour faire " quelque chose', puis d'attendre et de faire la même chose à nouveau. Ou, sur Windows, vous pouvez utiliser
SetTimer
qui déclencheraitWM_TIMER
événement sur chaque intervalle (il ne nécessite pas de fil). Vous pouvez également utiliser waitable de la minuterie, la minuterie multimédia etc.Au dernier, mais assez important - avez-vous besoin de plate-forme et le compilateur de compatibilité? Ce qui signifie que, quel système d'exploitation vous utilisez, ou si vous avez besoin indépendante de la plateforme? Quel compilateur caractéristiques que vous recherchez (C++11 et C++14 ou avant C++11).
OriginalL'auteur Ajay
Si vous codez avec Visual C++, vous pouvez ajouter un timer élément de la forme que vous souhaitez appeler une fonction périodique (ici on l'appelle ma forme est
MainForm
, et mon timerMainTimer
). Ajoutez un appel à l'événement tick dans les "Événements". Le concepteur va ajouter cette ligne dans votre .h fichier:Puis, à chaque intervalle spécifiée (en ms), l'application va appeler cette fonction
OriginalL'auteur RawBean
Désolé, mais je n'ai pas trouver un design plus simple.
Vous pourriez, faire une classe qui possède à la fois un fil, et un
weak_ptr
à lui-même,pour être un "titulaire" que le callable pouvez le voir en toute sécurité, parce que le callable
va existe encore, même si l'objet est détruit. Vous ne voulez pas un bancales pointeur.
OriginalL'auteur user9335240