 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Benoît Sibaud Guest
|
Posted: Tue Jun 08, 2004 3:10 pm Post subject: Re: sleep ? |
|
|
Salut,
| Quote: | J'essaye de convertir un programme C++ de Windows à Linux.
Or je tombe sur la fonction de pause :
Sleep(50);
Je souhaite la remplacer par une fonction équivalente et mon livre de C
indique la fonction sleep() mais pas la librairie dans laquelle elle
serait contenue.
|
NOM
sleep - Endormir le processus pour une durée déterminée.
SYNOPSIS
#include <unistd.h>
unsigned int sleep (unsigned int nb_sec);
DESCRIPTION
sleep() endort le processus jusqu'à ce que nb_sec secondes se
soient
écoulées, ou jusqu'à ce qu'un signal non-ignoré soit reçu.
Attention le sleep() sous GNU/Linux est en secondes et celui sous
Windows en microsecondes je crois.
--
Benoît Sibaud
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Tue Jun 08, 2004 3:32 pm Post subject: Re: sleep ? |
|
|
On Tue, 08 Jun 2004 15:59:07 -0500, Lionel Allorge
<lionel.allorge (AT) lunerouge (DOT) com> wrote:
| Quote: | J'essaye de convertir un programme C++ de Windows à Linux.
Or je tombe sur la fonction de pause :
Sleep(50);
Je souhaite la remplacer par une fonction équivalente
|
A ma connaissance, la gestion d'un temps précis (ici, 50 ms) est
difficile, voire impossible, en C++. Mieux vaut te tourner vers une
fonction spécifique à Linux.
--
FLL, Epagneul Breton
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Tue Jun 08, 2004 8:31 pm Post subject: Re: sleep ? |
|
|
Benoît Sibaud wrote:
| Quote: | Attention le sleep() [...] sous
Windows en microsecondes je crois.
|
Millisecondes.
--
Loïc
|
|
| Back to top |
|
 |
Lionel Allorge Guest
|
Posted: Tue Jun 08, 2004 8:59 pm Post subject: sleep ? |
|
|
Bonjour,
J'essaye de convertir un programme C++ de Windows à Linux.
Or je tombe sur la fonction de pause :
Sleep(50);
Je souhaite la remplacer par une fonction équivalente et mon livre de C
indique la fonction sleep() mais pas la librairie dans laquelle elle
serait contenue.
Toute aide sera la bienvenue.
D'avance merci.
Bonne continuation.
--
Lionel Allorge
Courriel : [email]lionel.allorge (AT) lunerouge (DOT) org[/email]
Lune Rouge : http://www.lunerouge.org
Film Libre : http://www.filmlibre.org
Terminal Damage : http://www.terminal-damage.org
<------>
"L'ennui dans ce monde, c'est que les idiots sont sûrs d'eux
et les gens sensés pleins de doutes." Bertrand Russell
|
|
| Back to top |
|
 |
Twxs Guest
|
Posted: Wed Jun 09, 2004 8:09 am Post subject: Re: sleep ? |
|
|
| Quote: | A ma connaissance, la gestion d'un temps précis (ici, 50 ms) est
difficile, voire impossible, en C++. Mieux vaut te tourner vers une
fonction spécifique à Linux.
|
question peut etre bete(je n'ai peut etre pas compris la question), mais
pourquoi ne pourrait on pas gerer un temps precis en C++?
Twxs
|
|
| Back to top |
|
 |
Pierre Maurette Guest
|
Posted: Wed Jun 09, 2004 8:23 am Post subject: Re: sleep ? |
|
|
Twxs <Twxs (AT) free (DOT) fr> typa:
| Quote: |
A ma connaissance, la gestion d'un temps précis (ici, 50 ms) est
difficile, voire impossible, en C++. Mieux vaut te tourner vers une
fonction spécifique à Linux.
question peut etre bete(je n'ai peut etre pas compris la question), mais
pourquoi ne pourrait on pas gerer un temps precis en C++?
Ce n'est pas C++ qui pose problème (même s'il n'existe rien de |
portable), c'est Windows. D'une part il filtre l'accès au système
(selon les versions), et d'autre part il décide des tranches de temps
allouées à chaque tâche. Disons qu'en continuant à utiliser Windows
normalement, il ne faut pas espérer générer des timings plus précis
que de une dizaine à quelques dizaines de millisecondes. On peut
espérer beaucoup beaucoup mieux en bouclant en attendant une valeur de
compteur, mais rien n'en garanti le fonctionnement "à chaque coup".
Tout ceci n'a rien à voir avec le C++.
Ceci dit, Windows n'affiche clairement aucune prétention dans le
domaine du temps réel.
--
Pierre
|
|
| Back to top |
|
 |
Hugues Delorme Guest
|
Posted: Wed Jun 09, 2004 10:46 am Post subject: Re: sleep ? |
|
|
"Lionel Allorge" <lionel.allorge (AT) lunerouge (DOT) com> a écrit dans le message de
news:ca4gsl$huo$1 (AT) news-reader5 (DOT) wanadoo.fr...
| Quote: | Bonjour,
J'essaye de convertir un programme C++ de Windows à Linux.
Or je tombe sur la fonction de pause :
Sleep(50);
Je souhaite la remplacer par une fonction équivalente et mon livre de C
indique la fonction sleep() mais pas la librairie dans laquelle elle
serait contenue.
|
J'ai répondu à cette question il y a peu dans un forum de développement C++.
J'ai testé la fonction suivante seulement sous Windows, tu peux me dire si
c'est ok avec Linux?
Ce qui suit est une fonction de pause qui fonction sous Windows et les
variantes d'Unix:
#ifndef _WIN32
# include <unistd.h>
#else
# include <windows.h>
#endif
#include <iostream>
#include <assert.h>
//Suspend execution of the calling process for ms milliseconds.
void wait_for (int ms)
{
assert (ms >= 0);//positive_argument
#ifndef _WIN32
usleep (ms);
#else
Sleep (ms);
#endif
}
//little test
int main ()
{
std::cout << "waiting 2 seconds ..." << std::endl;
wait_for (2000);
std::cout << "finished" << std::endl;
return 0;
}
|
|
| Back to top |
|
 |
Amerio Guest
|
Posted: Wed Jun 09, 2004 11:27 am Post subject: Re: sleep ? |
|
|
| Quote: | J'essaye de convertir un programme C++ de Windows à Linux.
Or je tombe sur la fonction de pause :
Sleep(50);
Je souhaite la remplacer par une fonction équivalente
A ma connaissance, la gestion d'un temps précis (ici, 50 ms) est
difficile, voire impossible, en C++. Mieux vaut te tourner vers une
fonction spécifique à Linux.
|
Attention aussi : sous win32, Sleep a comme effet complementaire de
permettre au systeme de donner la main a d'autre thread. Si par ex le
programme est une boucle infini while(1) { traitement(); }, l'occupation CPU
sera de 100%. En rajoutant Sleep(1) dedans, l'occupation tombe a qlq %.
C'est aussi necessaire parfois en programmation multithread pour ne pas
qu'un des threads "bouffe" a lui seul tout le cpu.
Sleep ne fait donc pas que mettre le programme en sommeil... Sous unix, il
faudra peut etre l'associer à yield.
|
|
| Back to top |
|
 |
K. Ahausse Guest
|
Posted: Wed Jun 09, 2004 12:36 pm Post subject: Re: sleep ? |
|
|
"Amerio" <amerio (AT) hotmail (DOT) com> a écrit dans le message de
news:40c6f42f$0$26912$626a14ce (AT) news (DOT) free.fr...
| Quote: | Attention aussi : sous win32, Sleep a comme effet complementaire de
permettre au systeme de donner la main a d'autre thread. Si par ex le
programme est une boucle infini while(1) { traitement(); }, l'occupation
CPU
sera de 100%.
|
Une chose m'étonne si tout le CPU est consacré à la boucle infinie, comme se
fait-il que les autres programmes continuent de marcher ?
|
|
| Back to top |
|
 |
Bertrand Motuelle Guest
|
Posted: Wed Jun 09, 2004 2:48 pm Post subject: Re: sleep ? |
|
|
"Hugues Delorme" <h-delorme (AT) techni-modul (DOT) fr> wrote
| Quote: | "Lionel Allorge" <lionel.allorge (AT) lunerouge (DOT) com> a écrit dans le message de
news:ca4gsl$huo$1 (AT) news-reader5 (DOT) wanadoo.fr...
J'essaye de convertir un programme C++ de Windows à Linux.
Or je tombe sur la fonction de pause :
Sleep(50);
Je souhaite la remplacer par une fonction équivalente et mon livre de C
indique la fonction sleep() mais pas la librairie dans laquelle elle
serait contenue.
Ce qui suit est une fonction de pause qui fonction sous Windows et les
variantes d'Unix:
#ifndef _WIN32
# include <unistd.h
#else
# include
#endif
#include
#include
//Suspend execution of the calling process for ms milliseconds.
void wait_for (int ms)
{
assert (ms >= 0);//positive_argument
#ifndef _WIN32
|
usleep (ms * 1000); // *1000 pour convertir en microsecondes
| Quote: | #else
Sleep (ms);
#endif
}
|
usleep comme son nom l'indique prend en paramètre un nombre de
microsecondes, pas millisecondes. Il me semble aussi que, au moins sur
solaris, ce paramètre ne pas être >= 1 000 000. Regarde plutôt du coté
de nanosleep qui ne souffre pas de ces limitations et fait partie de
la norme POSIX.
Bertrand.
|
|
| Back to top |
|
 |
Alexandre Guest
|
Posted: Wed Jun 09, 2004 4:25 pm Post subject: Re: sleep ? |
|
|
| Quote: | question peut etre bete(je n'ai peut etre pas compris la question), mais
pourquoi ne pourrait on pas gerer un temps precis en C++?
|
parce que ça dépend de la plate-forme.
|
|
| Back to top |
|
 |
Alexandre Guest
|
Posted: Wed Jun 09, 2004 4:26 pm Post subject: Re: sleep ? |
|
|
"K. Ahausse" <anonymous (AT) discussions (DOT) microsoft.com> a écrit dans le message
de news:ca7039$v3c$1 (AT) news-reader1 (DOT) wanadoo.fr...
| Quote: |
"Amerio" <amerio (AT) hotmail (DOT) com> a écrit dans le message de
news:40c6f42f$0$26912$626a14ce (AT) news (DOT) free.fr...
Attention aussi : sous win32, Sleep a comme effet complementaire de
permettre au systeme de donner la main a d'autre thread. Si par ex le
programme est une boucle infini while(1) { traitement(); }, l'occupation
CPU
sera de 100%.
Une chose m'étonne si tout le CPU est consacré à la boucle infinie, comme
se
fait-il que les autres programmes continuent de marcher ?
pas tout le CPU. Juste un pourcetage du temps : Win32 est un sytstème |
multitache préemptif, il passe la main aux autres threads régulièrement.
|
|
| Back to top |
|
 |
Adrian Guest
|
Posted: Wed Jun 16, 2004 11:35 am Post subject: Re: sleep ? |
|
|
Alexandre wrote:
| Quote: | "K. Ahausse" <anonymous (AT) discussions (DOT) microsoft.com> a écrit dans le message
de news:ca7039$v3c$1 (AT) news-reader1 (DOT) wanadoo.fr...
"Amerio" <amerio (AT) hotmail (DOT) com> a écrit dans le message de
news:40c6f42f$0$26912$626a14ce (AT) news (DOT) free.fr...
Attention aussi : sous win32, Sleep a comme effet complementaire de
permettre au systeme de donner la main a d'autre thread. Si par ex le
programme est une boucle infini while(1) { traitement(); }, l'occupation
CPU
sera de 100%.
Une chose m'étonne si tout le CPU est consacré à la boucle infinie, comme
se
fait-il que les autres programmes continuent de marcher ?
pas tout le CPU. Juste un pourcetage du temps : Win32 est un sytstème
multitache préemptif, il passe la main aux autres threads régulièrement.
|
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|