Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3021 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Sleep sans avoir 99% de CPU de pris ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[C++] Sleep sans avoir 99% de CPU de pris ?

n°553950
Tetedeienc​h
Head Of God
Posté le 29-10-2003 à 22:22:05  profilanswer
 

Je recherche une alternative a la fonction sleep qui prenne pas 100% du CPU :D
 
Ca existe ? ( ca doit aussi etre relativement précis ;) )
 
Merci :jap:

mood
Publicité
Posté le 29-10-2003 à 22:22:05  profilanswer
 

n°553952
kadreg
profil: Utilisateur
Posté le 29-10-2003 à 22:25:00  profilanswer
 

quel OS/architecture/niveau de précision ?


Message édité par kadreg le 29-10-2003 à 22:25:25

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°553956
*syl*
--> []
Posté le 29-10-2003 à 22:26:18  profilanswer
 

sleep() ne prends rien en CPU, t'as bus toi..  :sarcastic:


Message édité par *syl* le 29-10-2003 à 22:26:30
n°553959
schnapsman​n
Zaford Beeblefect
Posté le 29-10-2003 à 22:27:17  profilanswer
 

*Syl* a écrit :

sleep() ne prends rien en CPU, t'as bus toi..  :sarcastic:  


 
va apprendre à lire mon jeune  :lol:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°553961
*syl*
--> []
Posté le 29-10-2003 à 22:29:00  profilanswer
 

SchnapsMann a écrit :


 
va apprendre à lire mon jeune  :lol:  

Arf..et le salaud m'a quoté, faudrais que je vienne plus sur le forum le soir parce qu'hier j'ai également fait une bourde parce que j'avais mal lu :(


Message édité par *syl* le 29-10-2003 à 22:29:27
n°553964
Tetedeienc​h
Head Of God
Posté le 29-10-2003 à 22:29:58  profilanswer
 

kadreg a écrit :

quel OS/architecture/niveau de précision ?


Niveau de précision : le même que le sleep de windows :D  
 
OS : winwin
 
architecture : x86 et supérieurs
 
:)

n°553966
*syl*
--> []
Posté le 29-10-2003 à 22:30:09  profilanswer
 

Et au fait tetedeiench, pkoi tu veux une alternative ?

n°553984
roromaino
Posté le 29-10-2003 à 22:35:28  profilanswer
 

Je crois que j'ai compris ce qu'il veut.
Je pense qu'il veut avoir la main pendant un Sleep.
Donc pour cela n'utilise pas Sleep mais la fonction GetTickCount.
 
The GetTickCount function retrieves the number of milliseconds that have elapsed since the system was started. It is limited to the resolution of the system timer. If you need a higher resolution timer, use amultimedia timer or a high-resolution timer.  
 
DWORD GetTickCount(VOID)
 
Parameters
This function has no parameters.  
 
Return Values
The return value is the number of milliseconds that have elapsed since the system was started.  
 
Remarks
The following table describes the resolution of the system timer.  
 
System Resolution  
Windows NT 3.5 and later The system timer runs at approximately 10ms.  
Windows NT 3.1 The system timer runs at approximately 16ms.  
Windows 95 and later The system timer runs at approximately 55ms.  
 
 
The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.  
 
Windows NT: To obtain the time elapsed since the computer was started, look up the System Up Time counter in the performance data in the registry key HKEY_PERFORMANCE_DATA. The value returned is an 8-byte value.  
 
QuickInfo
  Windows NT: Requires version 3.1 or later.
  Windows: Requires Windows 95 or later.
  Windows CE: Requires version 1.0 or later.
  Header: Declared in winbase.h.
  Import Library: Use kernel32.lib.

n°553999
*syl*
--> []
Posté le 29-10-2003 à 22:41:34  profilanswer
 

Nan, pas GetTickCount() puisque c'est juste pour récupérer un nombre, et s'il fait un while() pour faire son sleep() bah ça bouffera tout le CPU [:spamafote]


Message édité par *syl* le 29-10-2003 à 22:42:21
n°554016
Tetedeienc​h
Head Of God
Posté le 29-10-2003 à 22:49:23  profilanswer
 

*Syl* a écrit :

Nan, pas GetTickCount() puisque c'est juste pour récupérer un nombre, et s'il fait un while() pour faire son sleep() bah ça bouffera tout le CPU [:spamafote]


 
Bingo *syl* :/

mood
Publicité
Posté le 29-10-2003 à 22:49:23  profilanswer
 

n°554017
Tetedeienc​h
Head Of God
Posté le 29-10-2003 à 22:49:59  profilanswer
 

Mon sleep ressemble a ca pour le moment :

Code :
  1. void MySleep(unsigned long ms)
  2. {
  3. DWORD time0, time;
  4. time0 = timeGetTime();
  5. do{
  6.   time = timeGetTime();
  7. }while ( (time-time0)<ms);
  8. }

n°554019
*syl*
--&gt; []
Posté le 29-10-2003 à 22:51:08  profilanswer
 

mais pkoi tu veux pas utiliser sleep() ????

n°554050
Tetedeienc​h
Head Of God
Posté le 29-10-2003 à 23:02:06  profilanswer
 

*Syl* a écrit :

mais pkoi tu veux pas utiliser sleep() ????


 
Parce que :
-Ca prends 100% du CPU :D
-Sur certains processeurs à économie d'énergie, le Sleep déclenche le changement de fréquence ( Speedstep et co).
 
:D

n°554060
SquiZZ
Posté le 29-10-2003 à 23:06:41  profilanswer
 

sur mon w2k, un sleep ne prend pas de temps processeur.
 
sinon tu peux essayer de faire un WaitForSingleObject ( http://msdn.microsoft.com/library/ [...] object.asp ) sur un objet que tu ne signales pas.
 
(en admettant que tu codes sous VC++)

n°554061
*syl*
--&gt; []
Posté le 29-10-2003 à 23:07:07  profilanswer
 

Citation :

Ca prends 100% du CPU :D

NOOOOOOOOOOOONNNNNN, je l'ai dis plus haut, y'avais 2 manière de comprendre ton post initial donc SchnapsMann je veux des excuses, sisi :D
 

Citation :

Sur certains processeurs à économie d'énergie, le Sleep déclenche le changement de fréquence ( Speedstep et co).

Bah euhh..

n°554063
*syl*
--&gt; []
Posté le 29-10-2003 à 23:08:48  profilanswer
 

SquiZz a écrit :

sinon tu peux essayer de faire un WaitForSingleObject ( http://msdn.microsoft.com/library/ [...] object.asp ) sur un objet que tu ne signales pas.

Wé mais il le signale qd ? Après un sleep() ? :lol:  
 

SquiZz a écrit :

(en admettant que tu codes sous VC++)

euh..remarque inutile, tu codes en win32 t'as axx à ça..

n°554067
SquiZZ
Posté le 29-10-2003 à 23:12:30  profilanswer
 

*Syl* a écrit :

Wé mais il le signale qd ? Après un sleep() ? :lol:  


justement tu le signales pas et t'attends le timeout de ton WaitForSingleObject
 

*Syl* a écrit :


euh..remarque inutile, tu codes en win32 t'as axx à ça..


bon désolé mais j'avais pas fait attention que c'était du win32, comme je code que des trucs avec les MFC je fais plus attention.

n°554068
Tetedeienc​h
Head Of God
Posté le 29-10-2003 à 23:12:55  profilanswer
 

*Syl* a écrit :

Citation :

Ca prends 100% du CPU :D

NOOOOOOOOOOOONNNNNN, je l'ai dis plus haut, y'avais 2 manière de comprendre ton post initial donc SchnapsMann je veux des excuses, sisi :D
 

Citation :

Sur certains processeurs à économie d'énergie, le Sleep déclenche le changement de fréquence ( Speedstep et co).

Bah euhh..


 
Ben désolé, mais ca se comprends comment ? :D
 
Vi, c'est chiant, quand tu veux mesurer la fréquence de la faire descendre pendant le test :D

n°554070
Tetedeienc​h
Head Of God
Posté le 29-10-2003 à 23:13:38  profilanswer
 

SquiZz a écrit :


justement tu le signales pas et t'attends le timeout de ton WaitForSingleObject
 
 
bon désolé mais j'avais pas fait attention que c'était du win32, comme je code que des trucs avec les MFC je fais plus attention.
 


C'est pas bête, je code sous VC++ .NET, mais tu peux détailler ?
 
Un objet que je ne signale pas :??:

n°554077
Ace17
Posté le 29-10-2003 à 23:17:01  profilanswer
 

tetedeiench a écrit :


Ca prends 100% du CPU :D


 
Si Sleep prenait 100% du cpu, cette fonction n'aurait aucun intéret; on utiliserait des boucles vides...
 
Je pense que pour ton probleme tu devrais essayer de diminuer la priorité de ton application avec SetThreadPriority (si ma mémoire est bonne) avec une boucle qui mouline un GetTickCount

n°554079
SquiZZ
Posté le 29-10-2003 à 23:20:19  profilanswer
 

tetedeiench a écrit :


C'est pas bête, je code sous VC++ .NET, mais tu peux détailler ?
 
Un objet que je ne signale pas :??:


 
un truc genre

Code :
  1. void MonSlipToutSale(int timeout)
  2. {
  3.   HANDLE handleQuiSertARien = CreateEvent(NULL, FALSE, FALSE, NULL);
  4.   WaitForSingleObject(handleQuiSertARien, timeout);
  5. }


 

n°554082
*syl*
--&gt; []
Posté le 29-10-2003 à 23:25:17  profilanswer
 

A tester mais j'pense que ça reviendra au même que Sleep().. J'viens de mâter vite fait les appels que font WaitForSingleObject() et Sleep() et les 2 font appels aux même primitives, GetTickCount() en autres..

n°554083
SquiZZ
Posté le 29-10-2003 à 23:25:22  profilanswer
 

en plus propre tu peux aller voir ça :
http://msdn.microsoft.com/library/ [...] bjects.asp

n°554086
SquiZZ
Posté le 29-10-2003 à 23:26:35  profilanswer
 

*Syl* a écrit :

A tester mais j'pense que ça reviendra au même que Sleep().. J'viens de mâter vite fait les appels que font WaitForSingleObject() et Sleep() et les 2 font appels aux même primitives, GetTickCount() en autres..


 
tiré du premier lien que j'ai donné :

Remarks
 
The WaitForSingleObject function checks the current state of the specified object. If the object's state is nonsignaled, the calling thread enters the wait state. It uses no processor time while waiting for the object state to become signaled or the time-out interval to elapse.

n°554088
*syl*
--&gt; []
Posté le 29-10-2003 à 23:27:28  profilanswer
 

SquiZz a écrit :


 
tiré du premier lien que j'ai donné :

Remarks
 
The WaitForSingleObject function checks the current state of the specified object. If the object's state is nonsignaled, the calling thread enters the wait state. It uses no processor time while waiting for the object state to become signaled or the time-out interval to elapse.



et ?
j'ai pas dis que ça bouffait du CPU hein..

n°554093
SquiZZ
Posté le 29-10-2003 à 23:32:53  profilanswer
 

*Syl* a écrit :

et ?
j'ai pas dis que ça bouffait du CPU hein..


 
désolé, j'ai lu/interprété un peu rapidement ton message :jap:  
 

n°554094
*syl*
--&gt; []
Posté le 29-10-2003 à 23:33:41  profilanswer
 

SquiZz a écrit :


 
désolé, j'ai lu/interprété un peu rapidement ton message :jap:  
 
 

y'a pas d'mal, j'arrête pas de mal interpréter les messages le soir moi aussi [:ddr555]

n°554116
bjone
Insert booze to continue
Posté le 30-10-2003 à 01:46:03  profilanswer
 

ché pas tu peux mettre un timer:
 
pour un process, quand y'a rien dans le queue de messages, le process est mis en attente.
 
quand tu reçois le message du timer, tu fais un "resume" de ton thread timé...
 
comme ça si tu reçois des autres messages (redraw, alt-f4), ton process réagira.
 
ça dépends de la précision que tu veux :/

n°554118
matafan
Posté le 30-10-2003 à 02:29:45  profilanswer
 

On peut savoir savoir ce que c'est ce processus qui te prends 100% du CPU ? Si ca ce trouve c'est un proc kernel dans le genre du « wait » d'AIX.

n°554129
Tetedeienc​h
Head Of God
Posté le 30-10-2003 à 07:09:49  profilanswer
 

Me suis mal expliqué :
 
-Je peux pas utiliserle Sleep car cela décenche l'écnomie d'énergie sur les portable
-Ma fonction de sleep prends 100% CPU
 
:(

n°554131
souk
Tourist
Posté le 30-10-2003 à 07:20:45  profilanswer
 

si un programme fait appel a la fonction sleep, le mode d'economie d'energie est declenchee ????
c'est quand meme bizarre nan ? genre tu fais tourner milles trucs, un de tes programmes fait appel a Sleep, et hop tout bascule ? :/
 
ca me parait douteux ca...et puis au pire, ca peut se desactiver je pense...en commencant par brancher le portable sur le secteur :D


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
n°554189
cricri_
Posté le 30-10-2003 à 09:15:45  profilanswer
 

Il me semble avoir eu des soucis également avec sleep() y a qqs années, mais je ne me rappele plus trop dans quel cas, mais j'avais des fonctionnements différents au niveau charge cpu suivant que j'utilisais Sleep(0) ou _sleep(0).

n°554194
Anerty
Posté le 30-10-2003 à 09:23:57  profilanswer
 

Pour endormir ton processus de maniere portable tu peux faire ca:
 
struct timeval tv;
tv.tv_sec=15; // Attends 15 secs
tv.tv_usec=0;
select(0, NULL, NULL, NULL, &tv);
 
par contre a cause d'un bug dans le select de winsock ca ne marchera pas sous windows, et dans ce cas remplace ca par un
 
HANDLE he=CreateEvent(NULL, TRUE, FALSE, NULL);
WaitForSingleObject (he, 15000);
CloseHandle (he);
 

n°554226
Kristoph
Posté le 30-10-2003 à 09:58:27  profilanswer
 

Si j'ai bien compris, tu veux faire une pause dans l'execution de ton programme, pause qui n'utilise pas de CPU mais qui ne déclenche pas la fonction d'économie d'énergie des portables. Fonction qui est déclenchée quand le CPU ne travaille pas a fond. Je me trompe ? C'est pas gagné dans ce cas :)


Message édité par Kristoph le 30-10-2003 à 09:58:36
n°554415
BifaceMcLe​OD
The HighGlandeur
Posté le 30-10-2003 à 12:36:07  profilanswer
 

Il y a peut-être la solution de changer la priorité de ton processus au niveau "Idle" pendant la durée d'attente. Ainsi ton processus pourra se permettre de prendre 100% du CPU, mais si une autre application demande du CPU, alors le CPU lui sera affecté plutôt qu'à ton application. Et si cette application demande 100% du CPU alors ton application en consommera zéro.
Bref, ton application, avec une priorité "Idle" , prendra toujours tout le CPU que les autres applications n'ont pas demandé, et seulement celui-là.


Message édité par BifaceMcLeOD le 30-10-2003 à 12:36:40
n°554421
*syl*
--&gt; []
Posté le 30-10-2003 à 12:42:15  profilanswer
 

BifaceMcLeOD a écrit :

Il y a peut-être la solution de changer la priorité de ton processus au niveau "Idle" pendant la durée d'attente. Ainsi ton processus pourra se permettre de prendre 100% du CPU, mais si une autre application demande du CPU, alors le CPU lui sera affecté plutôt qu'à ton application. Et si cette application demande 100% du CPU alors ton application en consommera zéro.
Bref, ton application, avec une priorité "Idle" , prendra toujours tout le CPU que les autres applications n'ont pas demandé, et seulement celui-là.

La fréquence risque d'être modifiée dans ce cas là, à tester..

n°554432
Tetedeienc​h
Head Of God
Posté le 30-10-2003 à 12:54:03  profilanswer
 

souk a écrit :

si un programme fait appel a la fonction sleep, le mode d'economie d'energie est declenchee ????
c'est quand meme bizarre nan ? genre tu fais tourner milles trucs, un de tes programmes fait appel a Sleep, et hop tout bascule ? :/
 
ca me parait douteux ca...et puis au pire, ca peut se desactiver je pense...en commencant par brancher le portable sur le secteur :D


 
Cai pas moi qui l'a dit, c'est un ami de CPU-Z :D
 

Citation :

Le Sleep déclenche le mode basse conso (pas sur tous, ça le fait sur PIII-M mais pas sur P4-M).


 
Pour le waitforsingleobject, merci, je tente le coo :)


Message édité par Tetedeiench le 30-10-2003 à 12:54:16
n°554502
bjone
Insert booze to continue
Posté le 30-10-2003 à 14:38:36  profilanswer
 

c'est pas le sleep qui le déclenche le mode basse conso, c'est le kernel, donc c'est applicable à toutes les formes de non-utilisation cpu d'un point de vue os :/
 
et c'est quoi le problème à avoir le cpu en mode économie d'énergie ?


Message édité par bjone le 30-10-2003 à 14:39:06
n°554505
Tetedeienc​h
Head Of God
Posté le 30-10-2003 à 14:43:34  profilanswer
 

BJOne a écrit :

c'est pas le sleep qui le déclenche le mode basse conso, c'est le kernel, donc c'est applicable à toutes les formes de non-utilisation cpu d'un point de vue os :/
 
et c'est quoi le problème à avoir le cpu en mode économie d'énergie ?


 
Essaye de mesurer la fréquence du CPU quand celle ci baisse qu'on rigole.
 
Ensuite, relis bien mon message, le kernel entre en mode basse conso si appel a sleep sur P3M, Dixit monsieur CPU-Z :D J'ose pas trop l'contredire tu vois ^^

n°554603
BifaceMcLe​OD
The HighGlandeur
Posté le 30-10-2003 à 15:56:26  profilanswer
 

*Syl* a écrit :

La fréquence risque d'être modifiée dans ce cas là, à tester..


Je ne pense pas car le CPU reste utilisé à 100% dans tous les cas.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Sleep sans avoir 99% de CPU de pris ?

 

Sujets relatifs
[PHP] le mode_safe n est pas pris en compte[windows thread/processes] Le Sleep sous windows n'est pas précis.
Récupérer le FSB et/ou le coef mult. d'un CPU ...[GetThreadTimes] % CPU utilisé par une appli.. des précisions ?
[visualc++] recuperer nom du CPU ?![Microsoft SDK] fonction de l'API win pour avoir le Load CPU ?
Trouver la valeur de l'id CPUUtilisation du CPU par une application
[PHP] cherche une alternative à SLEEP (problème résolut)[Threads] A t'on un controle quelconque sur le CPU utilise ?
Plus de sujets relatifs à : [C++] Sleep sans avoir 99% de CPU de pris ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR