Fonction Wait en C++
Résolu/Fermé13 réponses
mamiemando
Messages postés
33433
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 décembre 2024
7 809
7 sept. 2007 à 10:07
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 :
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 :
Bonne chance
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
4 juin 2017 à 22:06
19 oct. 2017 à 13:18