Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1509 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Appel périodique d'une fonction??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Appel périodique d'une fonction??

n°1730532
fedora6
Posté le 10-05-2008 à 19:38:38  profilanswer
 

Salut à tous :hello:  
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.

mood
Publicité
Posté le 10-05-2008 à 19:38:38  profilanswer
 

n°1730536
ccp6128
Syntax error
Posté le 10-05-2008 à 19:49:43  profilanswer
 

En utilisant un timer.

n°1730565
jesus_chri​st
votre nouveau dieu
Posté le 10-05-2008 à 23:06:12  profilanswer
 

+1
 
Pas possible en C++ standard et pur, sauf si ton programme ne fait rien d'autre que d'appeler la fonction :
 

Code :
  1. for ( ; ; )
  2. {
  3.    time_t previous = time( NULL );
  4.    while( difftime( time( NULL ), previous ) < 5 );
  5.    f();
  6. }


 
 
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.

n°1730584
Joel F
Real men use unique_ptr
Posté le 11-05-2008 à 10:49:16  profilanswer
 

boost::asio a des versions portables de tout le patakesse nécessaire, avec en outre , des méthodes d'attentes asynchrones.

n°1832460
jotelecom
Posté le 30-12-2008 à 13:31:54  profilanswer
 

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 !).

n°1832468
olivthill
Posté le 30-12-2008 à 13:46:50  profilanswer
 

Il faudrait connaitre l'environnement.
 
Par exemple, si c'est sous Windows, les timers existent et sont faciles d'utilisation.

n°1832471
frenchtouc​co
Posté le 30-12-2008 à 13:52:04  profilanswer
 

tout à fait,si tu n'as pas de contrainte de portabilité, utilise setTimer de windows


Message édité par frenchtoucco le 30-12-2008 à 13:56:53

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1832680
Joel F
Real men use unique_ptr
Posté le 30-12-2008 à 21:42:01  profilanswer
 

et ma réponse elle est transparente ...

n°1832683
sligor
Posté le 30-12-2008 à 21:53:48  profilanswer
 

Joel F a écrit :

et ma réponse elle est transparente ...


la portabilité ça intéresse uniquement les personnes compétentes  :o


Message édité par sligor le 30-12-2008 à 21:54:00
n°1832715
frenchtouc​co
Posté le 31-12-2008 à 01:41:26  profilanswer
 

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

Message cité 3 fois
Message édité par frenchtoucco le 31-12-2008 à 01:43:30

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
mood
Publicité
Posté le 31-12-2008 à 01:41:26  profilanswer
 

n°1832722
frenchtouc​co
Posté le 31-12-2008 à 03:22:17  profilanswer
 

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


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1832738
Joel F
Real men use unique_ptr
Posté le 31-12-2008 à 09:46:44  profilanswer
 

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 :o

n°1832871
frenchtouc​co
Posté le 31-12-2008 à 14:57:26  profilanswer
 

Joel F a écrit :


Et pour info, vendredi c'ets vendredi :o


 
lol


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1833328
xilebo
noone
Posté le 03-01-2009 à 11:51:24  profilanswer
 

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.

Message cité 1 fois
Message édité par xilebo le 03-01-2009 à 12:05:30
n°1833390
frenchtouc​co
Posté le 03-01-2009 à 14:40:35  profilanswer
 

xilebo a écrit :


 
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.


 
oui typiquement ici ça a un intérêt biensûr!


Message édité par frenchtoucco le 03-01-2009 à 14:41:12

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Appel périodique d'une fonction??

 

Sujets relatifs
gérer une fonction d'un programme automatiquement?inclure fonction C dans du C++
Extraire une seule valeur d'une fonction retournant un vecteurAppel d'une fonction
DirectShow:La fonction GetCurrentBuffer ne recupére pas le buffer??Fonction de calcul de stock par ordre d'insertion
pbm avec trigger avec fonction pour replication sur oracleappel du destructeur et opérateurs
Appel aux pros de GTK et manipulation des images. J'avance pas ! 
Plus de sujets relatifs à : Appel périodique d'une fonction??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR