C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

sleep ?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Benoît Sibaud
Guest





PostPosted: Tue Jun 08, 2004 3:10 pm    Post subject: Re: sleep ? Reply with quote



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





PostPosted: Tue Jun 08, 2004 3:32 pm    Post subject: Re: sleep ? Reply with quote



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.

--
Wink
FLL, Epagneul Breton

Back to top
Loïc Joly
Guest





PostPosted: Tue Jun 08, 2004 8:31 pm    Post subject: Re: sleep ? Reply with quote



Benoît Sibaud wrote:

Quote:
Attention le sleep() [...] sous
Windows en microsecondes je crois.

Millisecondes.

--
Loïc

Back to top
Lionel Allorge
Guest





PostPosted: Tue Jun 08, 2004 8:59 pm    Post subject: sleep ? Reply with 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.

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





PostPosted: Wed Jun 09, 2004 8:09 am    Post subject: Re: sleep ? Reply with quote


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





PostPosted: Wed Jun 09, 2004 8:23 am    Post subject: Re: sleep ? Reply with quote

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





PostPosted: Wed Jun 09, 2004 10:46 am    Post subject: Re: sleep ? Reply with 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...
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





PostPosted: Wed Jun 09, 2004 11:27 am    Post subject: Re: sleep ? Reply with quote

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





PostPosted: Wed Jun 09, 2004 12:36 pm    Post subject: Re: sleep ? Reply with quote


"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





PostPosted: Wed Jun 09, 2004 2:48 pm    Post subject: Re: sleep ? Reply with quote

"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





PostPosted: Wed Jun 09, 2004 4:25 pm    Post subject: Re: sleep ? Reply with quote

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.

Quote:

Twxs



Back to top
Alexandre
Guest





PostPosted: Wed Jun 09, 2004 4:26 pm    Post subject: Re: sleep ? Reply with 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...
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





PostPosted: Wed Jun 16, 2004 11:35 am    Post subject: Re: sleep ? Reply with quote



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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.