IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Affichage périodique d'une fonction


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2003
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 2
    Points : 5
    Points
    5
    Par défaut [Resolu]Affichage périodique d'une fonction
    J'ai creer une fonction graphique d'affichage et j'aimerai qu'elle s'exécute toutes les deux secondes.
    Est ce qu'il existe un moyen en C de fixer la période d'éxécution (en seconde) d'une fonction ??

    D'avance merci

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Tu peux faire une boucle de temporisation; par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i = 0; i < 9999999; i++)
    Et ajuste la valeur maximale de i pour obtenir a peu pres 2 secondes.

    Une autre méthode consisite à utiliser la fonction sleep() ou usleep()
    Elles prennent en paramettre la durée d'attente(en millisecondes je crois)

    N'hésites pas si t as des questions ...
    ********************
    Fragonard, le roi du canular.
    Quand est-ce que le serveur passe à l'heure d'hiver ?

  3. #3
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Fragonard
    Tu peux faire une boucle de temporisation; par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i = 0; i < 9999999; i++)
    Ce système va engranger plusieurs problèmes :
    1. Il va utiliser toutes les ressources de ta machine pendant ce temps, alors que je suppose que ton programme à autre chose à faire.

    2. Pour obtenir 2 secondes exactement tu vas en effectuer des tests afin de trouver le bon nombre à passer dans la boucle.

    3. si tu changes de machine, ton temps ne sera plus de 2 secondes, car l'exécution des cycles sera plus rapide (ou plus lente) suivant le CPU utilisé.

    Tu peux utiliser SetTimer(), il exécutera ta fonction dans les bons délais.
    Errare humanum est ... sed humanus naturae erratum est.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par Fragonard
    Une autre méthode consisite à utiliser la fonction sleep() ou usleep()
    Elles prennent en paramettre la durée d'attente(en millisecondes je crois)
    pour sleep() c'est des secondes

    et le problème avec cette fonction c'est que je n'ai pas réussi à l'arreter

  5. #5
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Tu peux faire ta fonction de pause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void pause( int nb_sec ) 
    {
       clock_t val ;
    val= (nb_sec * CLOCKS_PER_SEC ) + clock() ;
    while( val > clock() ) ;
    }
    Puis tu l'appelles :
    Nas'

  6. #6
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par Willand
    pour sleep() c'est des secondes

    et le problème avec cette fonction c'est que je n'ai pas réussi à l'arreter
    Comment ca l'arreter ? Soit tu creer un handler de signal et tu balance un signal pour reveiller le process, soit tu fais des thread, dont un qui ne fait que dormir et quand il se reveille, il declanche l'affichage.

  7. #7
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut
    Ou une thread d'affichage qui fait un à la fin de l'affichage et qui tourne en boucle.
    Tom

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    J'ai l'habitude de travailler sous linux et ce genre de problèmes se résoud grace aux signaux et je pense que cela existe sous windows puisque c'est une norme Posix.
    Dans ton cas il suffit de redéfinir le signal SIGALRM, je te conseille de consulter sur le net ou sur le manuel linux la structure sigaction ainsi que l'appelle sigaction.
    J'espere que cette solution te conviendra et elle me semble la plus adaptée a ton problème.
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

  9. #9
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut
    Je ne suis pas sur que Windows respecte la norme POSIX. Il me semble que POSIX c'est pour UNIX et LINUX.
    Tom

  10. #10
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    et Sleep() (attention à la majuscule !!) ne marche pas non plus ?

    Sleep() prend en paramètre des millisecondes.
    Errare humanum est ... sed humanus naturae erratum est.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 304
    Points : 253
    Points
    253
    Par défaut
    Méa culpa Metal Tom pour Posix .
    Suite a ta remarque j'ai fait des recherches et voila ce que j'ai obtenu

    [POSIX] Portable Operating System for Computer Environment. Norme Unix de l'IEEE, numérotée « 1003.1 », et qui spécifie le noyau du système. La norme POSIX 1-b spécifie les noyaux temps réel. La « 1-c » spécifie les threads. C'était une norme excellente, mais qui fut remplacée par les Spec1170.
    Donc Posix est une norme UNIX. Je ne connais pas la programmation système windows mais je suis sur qu'il existe un systeme de signaux permettant de résoudre le problème du monsieur.
    A bientot
    TOUT CE QUI EST VRAISEMBLABLE N'EST PAS FORCEMENT VRAI . MEFIEZ VOUS

  12. #12
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut
    En fait comme beaucoup de monde j'ai appris la programmation système sous Linux/UNIX donc la prog système Windows : connais pas bien.
    Mais en tout cas sous Linux/UNIX on peut faire des trucs puissants assez facilement. Ca c'est sûr.
    Tom

  13. #13
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2003
    Messages : 88
    Points : 59
    Points
    59
    Par défaut
    La fonction sleep marche t'elle sur les environnements windows ?

  14. #14
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Sylk
    La fonction sleep marche t'elle sur les environnements windows ?
    La fonction Sleep (avec une majuscule) existe : http://msdn.microsoft.com/library/en...base/sleep.asp

  15. #15
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2003
    Messages : 88
    Points : 59
    Points
    59
    Par défaut
    il faut inclure une bibliotheque pour l'utiliser ?

  16. #16
    Membre habitué
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Points : 125
    Points
    125
    Par défaut
    En bas de l'article donné par gl:

    Header: Declared in Winbase.h; include Windows.h.
    Library: Use Kernel32.lib.

  17. #17
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    tu as en effet :
    Sleep(millisecondes)

    mais le mieux sous windows c'est d'utiliser un timer (regarde la fonction
    SetTimer)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Supprimer l'affichage console d'une fonction
    Par badreama dans le forum MATLAB
    Réponses: 5
    Dernier message: 02/08/2014, 00h26
  2. [Tableaux] affichage résultat d'une fonction
    Par benooiit dans le forum Langage
    Réponses: 4
    Dernier message: 04/01/2007, 17h37
  3. Réponses: 11
    Dernier message: 17/05/2006, 08h39
  4. Affichage d'un vector dans une fonction
    Par jamesleouf dans le forum SL & STL
    Réponses: 1
    Dernier message: 16/03/2006, 19h05
  5. une fonction d'affichage à rajouter
    Par isidore dans le forum C++
    Réponses: 17
    Dernier message: 27/02/2005, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo