Fonction Wait en C++

Résolu/Fermé
totodude - 6 avril 2004 à 16:28
 Mansouri - 19 oct. 2017 à 13:18
Salut tout le monde,

j'ai un pb en C++. mon prog n'attend pas une ligne de commande, ce qui a pour effet qu'il continue comme si elle n'avait pas été la.

du coup je voudrais mettre un truc du genre "Wait(temps)"

quelqu'un connaitrai la commande et les parametres a passer ?

merci bcp

tom

13 réponses

mamiemando Messages postés 33199 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 juillet 2024 7 763
7 sept. 2007 à 10:07
L'idée de faire une boucle for vide est mauvaise car les ordis récents vont la passer quasi instanément même avec une grande valeur. De plus le comportement sera différent d'une machine à l'autre.

La commande wait ne sert pas à attendre un certain temps mais attends un signal (cf cours de système).
http://pwet.fr/man/linux/appels_systemes/wait/

Voici une manière plus ou moins propre de faire et qui se comportera toujours de la même façon :
#include <ctime>
#include <iostream>

int main(){
    time_t t0 = time(NULL);
    unsigned tmax = 2;
    std::cout << "j'attends " << tmax << " secondes" << std::endl;
    while(static_cast<unsigned>(time(NULL)-t0) < tmax);
    std::cout << tmax << "s écoulées" << std::endl;
    return 0;
}

Le problème c'est que ta charge CPU reste à 100% pendant l'attente des 2 secondes ce qui est un peu dommage vu qu'on ne fait rien. C'est pour ça que faire une boucle est une mauvaise idée. En fait il faut simplement endormir ton processus pendant tmax secondes :
extern "C"{
    #include <unistd.h>
}
#include <iostream>

int main(){
    unsigned tmax = 2;
    std::cout << "j'attends " << tmax << " secondes" << std::endl;
    sleep(tmax);
    std::cout << tmax << "s écoulées" << std::endl;
    return 0;
}


Bonne chance
6
tu es un bon programmeur
1
Merci bien
0