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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Eoweakin
Niveau 3
Niveau 3
Messages : 46
Enregistré le : sam. 04 juil. 2009 10:48
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par Eoweakin le jeu. 24 sept. 2009 16:59, modifié 3 fois.
Avatar du membre
DJSIR
Niveau 8
Niveau 8
Messages : 583
Enregistré le : mar. 01 juil. 2008 15:16
Localisation : 76, Le HAVRE (in the DJSIR World)
Status : Hors ligne

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

#2

Message 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...
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin
Avatar du membre
Eoweakin
Niveau 3
Niveau 3
Messages : 46
Enregistré le : sam. 04 juil. 2009 10:48
Status : Hors ligne

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

#3

Message par Eoweakin »

Oups ! Désolé ! J'étais un peu pressé...
Excusez-moi ô grand DJSIR [Prosternation], j'recommencerais plus promis ! :mrgreen:
Avatar du membre
DJSIR
Niveau 8
Niveau 8
Messages : 583
Enregistré le : mar. 01 juil. 2008 15:16
Localisation : 76, Le HAVRE (in the DJSIR World)
Status : Hors ligne

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

#4

Message 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.
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

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

#5

Message 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 !"
Avatar du membre
DJSIR
Niveau 8
Niveau 8
Messages : 583
Enregistré le : mar. 01 juil. 2008 15:16
Localisation : 76, Le HAVRE (in the DJSIR World)
Status : Hors ligne

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

#6

Message par DJSIR »

En faite, une MsgBox avec un TimeOut ferait l'affaire ?
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

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

#7

Message par Voodoo »

Sans doute, mais ce n'est pas très fonctionnelle car si on appuie sur ok avant le délai de 2h....
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

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

#8

Message 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
Signez ici
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#9

Message 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().
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#10

Message 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' ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Eoweakin
Niveau 3
Niveau 3
Messages : 46
Enregistré le : sam. 04 juil. 2009 10:48
Status : Hors ligne

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

#11

Message 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 ? :?
Avatar du membre
DJSIR
Niveau 8
Niveau 8
Messages : 583
Enregistré le : mar. 01 juil. 2008 15:16
Localisation : 76, Le HAVRE (in the DJSIR World)
Status : Hors ligne

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

#12

Message 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.
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin
Avatar du membre
Eoweakin
Niveau 3
Niveau 3
Messages : 46
Enregistré le : sam. 04 juil. 2009 10:48
Status : Hors ligne

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

#13

Message par Eoweakin »

Ok, merci pour votre aide ! :wink:
Avatar du membre
DJSIR
Niveau 8
Niveau 8
Messages : 583
Enregistré le : mar. 01 juil. 2008 15:16
Localisation : 76, Le HAVRE (in the DJSIR World)
Status : Hors ligne

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

#14

Message par DJSIR »

Ton message du dessus n'a pas été édité.. Tu as juste édité ton dernier post
$DJSIR = "1000110001010101011010000101001101001101001010101011010"
(ne décodez pas le binaire, ça veux rien dire)

[Func] ProgressBar, aller plus loin
Répondre