Appel périodique d'une fonction?? - C++ - Programmation
Marsh Posté le 10-05-2008 à 23:06:12
+1
Pas possible en C++ standard et pur, sauf si ton programme ne fait rien d'autre que d'appeler la fonction :
Code :
|
Dans une boucle (ici infinie), ça appelle f() toutes les 5s, en bouffant 100% de ton CPU, tout le temps. Donc méthode portable mais complètement crade.
Marsh Posté le 11-05-2008 à 10:49:16
boost::asio a des versions portables de tout le patakesse nécessaire, avec en outre , des méthodes d'attentes asynchrones.
Marsh Posté le 30-12-2008 à 13:31:54
Je suis d'accord avec ccp6128 !
Plus précisément, il faut que tu lances un thread au début de ton main afin d'exécuter en parallèle un processus qui ne sert qu'à appeler ta fonction périodiquement. Pour cela, il faut utiliser un TIMER, et non la solution proposée par jesus_Christ, car avec son code, ton ordinateur va complètement freezer (il fera le calcul en boucle du difftime, autant dire que de mettre une telle condition dans un while, c'est quasiment créer une boucle infinie !).
Marsh Posté le 30-12-2008 à 13:46:50
Il faudrait connaitre l'environnement.
Par exemple, si c'est sous Windows, les timers existent et sont faciles d'utilisation.
Marsh Posté le 30-12-2008 à 13:52:04
tout à fait,si tu n'as pas de contrainte de portabilité, utilise setTimer de windows
Marsh Posté le 30-12-2008 à 21:42:01
ReplyMarsh Posté le 30-12-2008 à 21:53:48
Joel F a écrit : et ma réponse elle est transparente ... |
la portabilité ça intéresse uniquement les personnes compétentes
Marsh Posté le 31-12-2008 à 01:41:26
je serais curieux de savoir le nombre d'applications qui ont tournées en définitif durant leur "durée de vie" sur, ne serait ce que deux plateformes différentes...en d'autre terme la portabilité c'est bien, mais quand ça à un intérêt
Marsh Posté le 31-12-2008 à 03:22:17
et ça représente plus de 50% des applis selon toi ? sans connaitre le chiffre mais juste intuitivement je dirais un largement +50% des applis tourne en mono platerforme
Marsh Posté le 31-12-2008 à 09:46:44
frenchtoucco a écrit : je serais curieux de savoir le nombre d'applications qui ont tournées en définitif durant leur "durée de vie" sur, ne serait ce que deux plateformes différentes...en d'autre terme la portabilité c'est bien, mais quand ça à un intérêt |
ASIO ets surtout interessant pour son API et son rationale. Le multipalteforme n'ets que la cerise sur le gateau.
Et pour info, vendredi c'ets vendredi
Marsh Posté le 31-12-2008 à 14:57:26
Joel F a écrit : |
lol
Marsh Posté le 03-01-2009 à 11:51:24
frenchtoucco a écrit : je serais curieux de savoir le nombre d'applications qui ont tournées en définitif durant leur "durée de vie" sur, ne serait ce que deux plateformes différentes...en d'autre terme la portabilité c'est bien, mais quand ça à un intérêt |
Je travaille depuis 6 ans sur une application que j'ai créé (on est 3 développeurs dessus maintenant), qui est portable sous windows (XP) / windowsCE / linux , et sur x86 et xscale PXA270 (avec de l'assembleur pour les 2 plateformes), et à chaque fois que j'ai a réécrire un module, je fais toujours attention que la portabilité soit conservée (quand c'est possible).
On voit souvent sur ce forum citer boost. J'aurais bien aimé l'intégrer mais à cause de winCE (sur laquelle elle n'est pas dispo, du moins à la date ou j'avais l'occasion de pouvoir changer), je n'ai pas pu l'intégrer
Intérêt : dans le domaine de l'embarqué (aéronautique dans mon cas), wince et linux sont 2 plateformes que l'on peut rencontrer. Parfois, le matériel est livré soit avec l'une, soit l'autre mais rarement les 2. Avec un programme portable, le déploiement se fait très rapidement en cas de changement de hard (et plateforme).
Pour répondre à la question posée, tu as au moins 2 solutions pour faire cela :
- Créer un thread. Tu peux utiliser la libpthread qui existe sous windows et sous linux.
- Créer un timer. Sous windows, c'est assez simple à mettre en place (voir API win32), sous linux pas de timer équivalent, mais tu peux regarder du coté des signaux avec le signal SIGALARM.
Attention, je vois que tu dois exécuter ta fonction 5 fois par seconde, soit 200ms. Est ce que la précision a une importance ? car les timers ont une résolution peu précise (55 ms sous windows, donc tes 200ms feront 220ms +- un delta). Si oui, regarder du coté des timers haute résolution.
Bien entendu, comme ça a été cité plus haut, il y a la bibliothèque boost qui t'offre pas mal de fonctionnalités pourvu que tu puisses l'utiliser.
Marsh Posté le 03-01-2009 à 14:40:35
xilebo a écrit : |
oui typiquement ici ça a un intérêt biensûr!
Marsh Posté le 10-05-2008 à 19:38:38
Salut à tous
Je veux faire un appel périodique pour une fonction pendant toute l'éxécution du programme
(5 fois par seconde), si quelqu'un peut m'aider je serais réconnaissante.