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 :

Fonction ne faisant rien pendant un temps donné (sleep)


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Points : 45
    Points
    45
    Par défaut Fonction ne faisant rien pendant un temps donné (sleep)
    Bonjour,

    J'ai besoin dans mon programme d'attendre un certain temps avant de réeffectuer une action... Si cela va trop vite, on ne verra rien! J'ai bien vu quelques pages parlant d'une fonction Sleep() sous windows et usleep() sous unix mais désirant utiliser des fonctions des bibliothèques standards, j'ai voulu réécrire une fonction simple.

    J'ai trouvé dans la bibliothèque <ctime> et dans les exemples donnés comment écrire une première fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void wait(int seconds)
    {
    	clock_t endwait;
    	endwait = clock() + seconds * CLOCKS_PER_SEC;
    	while (clock() < endwait) {}
    }
    Seulement les secondes sont anormalements lentes... Ne trouvant pas de solution, j'ai contourné le problème et écrit cette deuxième fonction qui donne le résultat attendu cette fois-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void wait2(int second)
    {
    	time_t start, end;
    	time(&start);
    	do
    	{
    		time(&end);
    	}
    	while (difftime(end,start) < 1);
    }
    Quelqu'un pourrait-il m'indiquer pourquoi cette première fonction ne fonctionne pas? Je n'aime pas ne pas comprendre quelque chose.
    Aussi, j'aimerais savoir quelle est la meilleure façon d'attendre un certain temps dans un programme?

    Merci d'avance!

    Rémi.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Points : 45
    Points
    45
    Par défaut
    Après réflexion, la deuxième fonction wait2() ne convient pas car j'ai besoin d'une précision en ms et non en seconde.

    J'ai fait quelques tests et il semble que ma première fonction wait() compte environ 27 secondes lorsqu'il s'en écoule 60 sur mon ordinateur! C'est assez étrange surtout que c'est le même programme que celui donné en exemple sur cplusplus.com...

    Note : j'ai effectivement posté dans le mauvais forum... Serait-il possible de déplacer mon sujet dans le forum c++/debuter? Merci beaucoup!

  3. #3
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    les fonctions Sleep Windows et usleep Linux sont standard, donc vous pouvez les utiliser sans problème

    par contre vos deux fonctions font une attente active, c'est à dire qu'elle prennent tout le CPU disponible, et cela c'est vraiment pas bien
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    utiliser des timers ou des signaux me parait plus adequat

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par remjg Voir le message
    J'ai fait quelques tests et il semble que ma première fonction wait() compte environ 27 secondes lorsqu'il s'en écoule 60 sur mon ordinateur! C'est assez étrange surtout que c'est le même programme que celui donné en exemple sur cplusplus.com...
    Quel OS ? Quel compilo ?

    Sinon, je rejoint mes camarades. Avec ça tu fais une attente active qui est en générale déconseillée. En effet, tu consommes des ressources processeurs inutilement.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Points : 45
    Points
    45
    Par défaut
    Merci pour vos réponses!

    Donc je suis sous GNU/Linux et je compile avec g++ 4.4.3, mais j'aimerais que ma partenaire de projet puisse compiler aussi sous Windows...

    Je me doutais bien que faire travailler le processeur pour rien n'était pas une solution très élégante... il faut donc que j'utilise certaines directives du préprocesseur pour obtenir quelque chose du genre :
    #ifdef WIN32
    # include <windows.h>
    # define SLEEP Sleep
    #else
    # include <unistd.h>
    # define SLEEP(x) usleep(1000*x)
    Seulement, je n'y connais rien du tout... Quelqu'un aurait-il un lien sous la main expliquant la démarche à suivre pour que le programme soit compilable sur plusieurs platformes? Je suppose que ça passe par la création d'un makefile?

    Sinon, utiliser des timers/signaux risque d'être trop compliqué pour moi pour l'instant... Je ne voudrais pas trop perdre de temps la dessus car ce n'est pas du tout le but de mon projet!

    Merci d'avance si vous avez quelques sources à potasser!

Discussions similaires

  1. Exécuter une action en boucle pendant un temps donné
    Par greg_78 dans le forum Général Python
    Réponses: 10
    Dernier message: 07/10/2010, 07h09
  2. construire une sinusoide pendant un temps donne
    Par chris83160 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 28/07/2010, 13h46
  3. garder un signal constant pendant un temps donné
    Par gusta dans le forum Simulink
    Réponses: 1
    Dernier message: 20/05/2010, 07h23
  4. [Mail] stoper une boucle pendant un temps donné
    Par gpsevasion dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2007, 01h14
  5. [VB5] apparition d'une fenetre pendant un temps donné
    Par NacNac dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/03/2007, 14h22

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