Page 1 sur 1

[R] Sleep() prends-t-il des ressources processeur ?

Posté : mar. 22 sept. 2009 18:57
par Eoweakin
Bonjour ! :mrgreen:
Voici un bout de mon code :

Code : Tout sélectionner

While 1
   [...]
   Sleep(7200000)
   [...]
Wend

 
Donc le script fait une pause de 2h avant de recommencer la boucle, mais voila :
Une pause de 2h avec sleep prends -t-elle beaucoup de ressources processeur ?
Si oui, comment faire autrement ?







Merci !



3oweakin.

Re: Faire une pause avec Sleep prends-t-il du processeur ?

Posté : mar. 22 sept. 2009 19:11
par DJSIR
Pour que nous puissions vous aider, modifiez le titre de votre message en suivant les règles de présentation d'un message.
Vous n'avez pas d'excuse, vous êtes sur le forum depuis le 22 aout.

Pour vôtre titre, supprimez le "Faire une pause avec", Sleep() ne fait que des pauses...

Re: Faire une pause avec Sleep prends-t-il du processeur ?

Posté : mar. 22 sept. 2009 19:14
par Eoweakin
Oups ! Désolé ! J'étais un peu pressé...
Excusez-moi ô grand DJSIR [Prosternation], j'recommencerais plus promis ! :mrgreen:

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mar. 22 sept. 2009 19:26
par DJSIR
Non, mais j'espère bien ! :lol:

Enfin, chez moi, j'ai testé avec un Sleep sur deux heures et je vais dire : Non

J'ai testé en mode Sans Echec, le processus Au3.exe ne monte pas à plus de 5000K et le process reste 0, 1, 2%...

Donc. Ya plus qu'a attendre confirmation.

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mar. 22 sept. 2009 21:15
par Voodoo
Oui et non !

Non car si tu lances un script avec juste un sleep tu auras très peu d'augmentation de la charge du processeur. Cependant le sleep est synonyme de ce que l'on appelle en développement: l'attente active. C'est à dire que le processeur est obligé d'allouer de la ressource pour le processus mais qui est perdu ! Cela ce traduit par le fait que si tu lances 30 scripts avec juste un sleep(infini) et un script avec une petite boucle for sa va lui prendre du temps ! (tout est relatif suivant la puissance du processeur évidemment). Un pc xp/vista tourne généralement avec 50-60 processus simultanément. Donc sans que tu le saches il y a 50 processus à exécuter tout le temps. Si tu mets un sleep, le processeur perdra du temps qui aurait pu être utilisé pour un autre processus !

Pour remédier à ce problème on utilise l'attente passive. Ce n'est pas une technique de programmation particulière cela fait juste référence aux fonctions qui "passent" la main au système et qui ne consomme donc pas inutilement de la ressource. Par exemple Msgbox().


Du coup, si tu faire un script propre il vaut mieux que tu te tournes vers "comment ajouter une tache dans le planificateur de tache de Windows !"

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mar. 22 sept. 2009 21:16
par DJSIR
En faite, une MsgBox avec un TimeOut ferait l'affaire ?

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mar. 22 sept. 2009 21:19
par Voodoo
Sans doute, mais ce n'est pas très fonctionnelle car si on appuie sur ok avant le délai de 2h....

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mer. 23 sept. 2009 00:44
par Iste
Intéressent, j'avais justement toujours cru que sleep() passait la main a windows et mettait le script en attente :/
Du coup c'est con, ya pas moyen d'avoir un sleep propre (dsl) genre avec une dll ou je sais pas
En C c'est possible si je me souvient

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mer. 23 sept. 2009 03:35
par orax
Il y a l'API Sleep.
DllCall("kernel32.dll","none","Sleep","dword",25000)
Et d'après "Process Explorer", le script semble d'avantage "suspendu" qu'avec la fonction AutoIt Sleep().

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mer. 23 sept. 2009 07:12
par Tlem
Je trouve, que l'on dévie légèrement du contexte, car il est question de la consommation CPU de la commande Sleep dans un script. :shock:
Par définition, Sleep est une pause, donc par rapport à une suite de commandes dans un script, elle 'ne consomme pas' de ressources CPU.

Évidemment, tout est relatif, mais il faut bien ce dire que de toute façon, si vous réalisez un script qui doit faire plusieurs actions et éventuellement attendre des commandes clavier ou souris, vous devrez obligatoirement créer une boucle infinie afin de surveiller les actions et donc dans ce cas vous aurez un minimum de consommation CPU de temps en temps.

Comme l'à très justement fait remarqué voodoo, si vous souhaitez lancer une suite d'action toute les deux heures et que vous voulez 0 consommation CPU dans l'attente, alors le mieux est de passer par le planificateur de tache de Windows, comme cela vous joindrez l'utile à l'agréable puisque l'ordinateur ce verra allégé de l'attribution mémoire permanente de votre script + 'de la consommation CPU' ...

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mer. 23 sept. 2009 18:05
par Eoweakin
Donc il faut mieux que j'utilise
DllCall("kernel32.dll","none","Sleep","dword",25000)
C'est ça ? :o
J'ai testé en mode Sans Echec, le processus Au3.exe ne monte pas à plus de 5000K et le process reste 0, 1, 2%...
Mais tout dépends du processeur non ? Car je risque de devoir exécuter ce script sur XP mais sur une unité centrale de 98 :roll: ... Alors le processeur n'est pas tout jeune :roll: ... Ça ne risque pas de ramer en pause ? :?

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mer. 23 sept. 2009 18:12
par DJSIR
Si tu utilise la fonction d'orax, d'après moi, il n'y a pas de problème.

Si c'est un vieux process, vaut mieux éviter des grands Sleeps de deux heures.

Sinon, l'idée du planificateur est pas mal.

[R] Sleep() prends-t-il des ressources processeur ?

Posté : mer. 23 sept. 2009 18:56
par Eoweakin
Ok, merci pour votre aide ! :wink:

Re: [..] Sleep() prends-t-il des ressources processeur ?

Posté : mer. 23 sept. 2009 19:01
par DJSIR
Ton message du dessus n'a pas été édité.. Tu as juste édité ton dernier post