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 :

[débutant] action tous les x temps


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 80
    Points
    80
    Par défaut [débutant] action tous les x temps
    Bonjour,

    je suis débutant en C, et j'aimerai savoir s'il est possible d'appeler une fonction tous les x temps (toutes les demi secondes par exemple).
    J'ai testé le sleep, mais ça a l'air de me bloquer les autres processus pendant l'attente... ce n'est pas ce que je recherche.

    Merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2006
    Messages : 77
    Points : 81
    Points
    81
    Par défaut
    au pire, tu peux faire une boucle qui tourne un moment dans le vide.

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par yobbas
    au pire, tu peux faire une boucle qui tourne un moment dans le vide.
    Ouais c'est vachement precis.

    Tout à l'heure en regardant les modules de Emmanuel je suis tombé sur le module timer, tu dois pouvoit l'utiliser.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2006
    Messages : 77
    Points : 81
    Points
    81
    Par défaut
    Ben après la programmation de la boucle dépendra de la vitesse de son PC, faut faire des essais.

    par ex(au hasard) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ( int i = 0 ; i < 100000 ; i++){}
    EDIT : après faut reconnaître que niveau portabilité c'est pas tip top...

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 80
    Points
    80
    Par défaut
    J'ai essayé avec les timer (j'utilise les outils OpenGL/GLUT), mais apparement...on ne peut pas arrêter un timer et le relancer identiquement.
    Quand je stoppe mon timer puis je le relance, j'ai l'impression qu'ils se superposent car l'action exécutée par l'appel de la fonction a augmenté de vitesse...

    J'ai été un peu vague dans mes propos je pense...
    En fait je dois faire un jeu d'avion style Space Invaders, et c'est pour la gestion des tirs que j'ai un problème. Après avoir appuyer sur un bouton, j'aimerai que le tir se déplace sur l'axe y toutes les x millisecondes.
    Si quelqu'un avait des idées d'implémentations ou des algos tout prêts, je suis preneur .

    Merci.

  6. #6
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par shinkyo
    J'ai essayé avec les timer (j'utilise les outils OpenGL/GLUT), mais apparement...on ne peut pas arrêter un timer et le relancer identiquement.
    Quand je stoppe mon timer puis je le relance, j'ai l'impression qu'ils se superposent car l'action exécutée par l'appel de la fonction a augmenté de vitesse...

    J'ai été un peu vague dans mes propos je pense...
    En fait je dois faire un jeu d'avion style Space Invaders, et c'est pour la gestion des tirs que j'ai un problème. Après avoir appuyer sur un bouton, j'aimerai que le tir se déplace sur l'axe y toutes les x millisecondes.
    Si quelqu'un avait des idées d'implémentations ou des algos tout prêts, je suis preneur .

    Merci.
    Et time() ?
    Avant de connaitre la fonction Sleep() je ne connaissait que time() alors j'ai fait cette petite fonction Tempo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int tempo(int te)
    {
      time_t intps,int1,int2;
      double dd;
      intps = time(NULL);
      int2=intps+te;
      int1=time(NULL);
      while (int1<int2)
          int1=time(NULL);
      return(1);
    }
    A toi de la modifier a ta gise si ca peu t'aider.

  7. #7
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par shinkyo
    J'ai testé le sleep, mais ça a l'air de me bloquer les autres processus pendant l'attente... ce n'est pas ce que je recherche.
    Je suis très étonné de ce que tu nous dit là. Tu es sûr de toi ?
    Quel est ton OS ?

  8. #8
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par yobbas
    Ben après la programmation de la boucle dépendra de la vitesse de son PC, faut faire des essais.

    par ex(au hasard) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ( int i = 0 ; i < 100000 ; i++){}
    EDIT : après faut reconnaître que niveau portabilité c'est pas tip top...

    Génial ton truc....
    Si tu as d'autres idées comme celle-ci, évites de les divulguer.

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Histoire de ne pas rentrer dans une grande discussion :

    Toute attente active est à éviter... On entend par attente active le fait de faire tourner une boucle sans faire un sleep ou un timeout quel qu'il soit. Cela veut dire que le programme utilise des ressources inutiles, ce qu'on aime pas.

    Donc les solutions de yobbas et miron (bien que tout le monde à commencer par là, y compris moi) sont à éviter comme la peste ou encore pire scanf...

    Il faut utiliser une solution pour redonner la main au système et attendre patiemment sans gaspiller du temps CPU...

    Jc

  10. #10
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par fearyourself
    Histoire de ne pas rentrer dans une grande discussion :

    Toute attente active est à éviter... On entend par attente active le fait de faire tourner une boucle sans faire un sleep ou un timeout quel qu'il soit. Cela veut dire que le programme utilise des ressources inutiles, ce qu'on aime pas.

    Donc les solutions de yobbas et miron (bien que tout le monde à commencer par là, y compris moi) sont à éviter comme la peste ou encore pire scanf...

    Il faut utiliser une solution pour redonner la main au système et attendre patiemment sans gaspiller du temps CPU...

    Jc
    Une idée ?

  11. #11
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par miron
    Une idée ?

    Ben sleep()

  12. #12
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par crocodilex
    Ben sleep()
    Oui mais si il a
    J'ai testé le sleep, mais ça a l'air de me bloquer les autres processus pendant l'attente... ce n'est pas ce que je recherche.
    Comment faire dans ce cas???

  13. #13
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par miron
    Oui mais si il a
    J'ai testé le sleep, mais ça a l'air de me bloquer les autres processus pendant l'attente... ce n'est pas ce que je recherche.
    Je demande a voir.
    Qu'il nous montre son code et qu'il nous dise sur quel système il tourne....

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 80
    Points
    80
    Par défaut
    J'ai testé le sleep il y a quelques jours, je ne saurai retrouvé le code que j'ai utilisé vu qu'il a été modifié. J'étais sous Cygwin (sous WinXP).
    Mais à y réfléchir, peut-être que le sleep ne me bloquait pas tous les autres processus en attente, mais il y avait un effet indésirable. Je vais essayer de retrouver lequel...

    En tout cas, je suis d'accord sur le fait qu'il faille éviter de créer des boucles dans le vide, afin de "faire passer le temps".

    En tout cas merci pour vos lumières, ça m'aidera à avancer .

Discussions similaires

  1. [AC-2003] executer une action tous les mercredis
    Par chuspyto dans le forum IHM
    Réponses: 1
    Dernier message: 27/03/2010, 14h19
  2. [Débutant] Récupérer tous les fichiers modifiés d'un workspace
    Par julian_ross dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 13/08/2009, 16h48
  3. [Débutant]_Récupérer tous les widgets d'une fenêtre_
    Par orfix dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 19/05/2008, 22h52
  4. Réponses: 5
    Dernier message: 12/12/2006, 10h19
  5. [débutant] #PCDATA = tous les caractères voulus ?
    Par prgasp77 dans le forum Valider
    Réponses: 2
    Dernier message: 17/05/2005, 22h53

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