Page 1 sur 1

[R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 12:25
par Chrnos023
Bonjour,

De nouveau dans l'aide générale.

J'étudie en ce moment le mode événementiel sur le site du zero.
Je me pose une question sur le code suivant:
► Afficher le texte
Pourquoi mettre une boucle avec juste un sleep à l'intérieur????
Voir ce bout de code:
► Afficher le texte
D'avance merci de votre aide.

Re: [..]Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 12:26
par Ks10
D'après ce que j'ai pu voir et constater cela réduit la consommation du CPU.
Mais inutile de mettre un Sleep(1000)
Un sleep(100) suffit.

Fait une expérimentation :

Crée un script avec une boucle sans un sleep et regarde ta consommation CPU.
Met un sleep et regarde à nouveau.

Re: [..]Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 13:33
par jguinch
Effectivement, même un Sleep(10) permet de réduire la consommation CPU.
Par contre, s'il n'y a rien d'autre dans la boucle, on peut même mettre une valeur plus importante, ce qui réduira encore plus la consommation : Sleep(0xFFFFFF) par ex.

Re: [..] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 14:04
par Chrnos023
J'ai remarqué en mettant en commentaire la boucle infini que la fenêtre apparait et disparait.
Je pensais que la boucle infini qu'on utilise en programmation séquentielle était inutile en programmation événementielle.

Re: [..] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 14:15
par TommyDDR
La boucle infinie est la boucle qui fait tourner votre programme, sans celle-ci on arrive au bout du fichier et donc le programme se quitte.

Nous avons donc besoin de cette boucle infinie, reste plus qu'à savoir ce qu'on met dedans, si on ne met rien, alors la condition du while ici -> "1" va être exécuté en boucle et très rapidement, vérifier un "1" (sans jeu de mot) n'est pas gourmand en soit, mais le faire en boucle sans attente reviendrait à pédaler sur un vélo sans chaîne (on donne tout ce qu'on à pour pas grand chose), c'est pour cela qu'on ajoute un sleep, pour diminuer le nombre de fois où l'on va regarder la condition du while.

PS : à vérifier mais je pense qu'il est préférable de mettre while(true) à while(1), en effet, l'intérieur d'un while est une condition et sera forcément transformer en booléen, en mettant true, je pense qu'on économise une transformation.

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 14:33
par Chrnos023
Après test, oui la boucle sans pause fait monter le pc de mon bureau (pas très puissant) à 50% de son UC, une pause de 1 seconde le fait pas dépasser le 10% d'utilisation (pour un pc ou l'UC tourne a 3 4%).

Merci d'avoir éclaircit ce point. Je retourne à mes événements.

Re: [..] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 14:39
par mikell
@Tommy

IsBool ( variable ) Checks if a variable's base type is boolean.
Return Value
Success: 1.
Failure: 0 if expression is not boolean type.


Pourquoi pas
Success: true
Failure: false
? :mrgreen:

Edit
Cela dit une boucle comme ça marche aussi très bien :roll:
► Afficher le texte

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 15:21
par jguinch
@Tommy : sur le principe, je suis d'accord pour dire que While True devrait être plus rapide que While 1 puisqu'il n'y a pas besoin d'exécuter le code...

J'ai fait un petit test, j'ai été surpris de voir que c'est While 1 qui est plus rapide à chaque fois (même si j'inverse les 2 tests) :
► Afficher le texte
Vous pouvez tester de votre côté ?

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 15:43
par TommyDDR
Je n'ai pas le bon PC pour tester ça (vive les entreprises qui fournissent des bêtes de courses à leurs employers...).

Les whiles varient de 600ms à 3400ms (et encore, j'ai du diviser par 10 le x max) donc pas représentatifs, je resterai chez moi ce soir.

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 15:53
par Chrnos023
voici le résultat du pc du boulot:
Avec True : 13477.1723235628
Avec 1 : 12927.0091275803
While 1 a gagné+>15:40:50 AutoIt3.exe ended.rc:0

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 18:06
par TT22
Avec True : 9813.02088826585
Avec 1 : 9594.33869525905
While 1 a gagné

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 20:12
par TommyDDR
Avec True : 3656.09928527831
Avec 1 : 3517.62097063391
While 1 a gagné

En effet le while 1 gagne toujours.

(Par contre il va falloir songer à vous acheter des vrais PC les gars :o )

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 20:39
par jguinch
Avec True : 7589.71065886528
Avec 1 : 7526.57334437988
While 1 a gagné

Donc au final, je crois qu'on peut conclure que While 1 est à préférer à While True, même si on ne sait pas trop pourquoi...
Ca nous a bien fait avancer le Schmilblick ! :D

Edit : et Mikell, tu as toujours ton PC sous XP ? Ca donne quoi ?

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 21:16
par ZDS
Avec True : 3156.02175045564
Avec 1 : 3034.71175977151
Avec $true : 3374.95722152416
While 1 a gagné

+1 avec les dires de TommyDDR ^^

(Je pense que True est interprété presque comme le sont les variables, peut-être est-ce à cause de ça vu que ça reste un mot clef et non une véritable valeur)
► Afficher le texte

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 21:47
par mikell
Avec True : 6084.80830375447
Avec 1 : 6035.86535150891
While 1 a gagné>Exit code: 0 Time: 12.397

Mon vieux PC sous XP gavé de machins n'est pas si lent ma foi :mrgreen:
La différence tient peut-être (?) au temps qu'AutoIt va mettre à lire les 4 caractères de 'true' et à les traduire en booléen
Avec 25 : 6043.89742547215
Avec 1 : 6040.9263602908
While 1 a gagné>Exit code: 0 Time: 12.398

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 22:13
par jchd
Parser le token, en déterminer la nature (constante, variable, mot-clé, fonction) puis la valeur et traiter cet argument à chaque tour de boucle. Il me semble évident que c'est un poil plus long pour True que pour 1.

Re: [R] Interrogation sur un code du tuto Autoit

Posté : lun. 12 mai 2014 23:10
par TommyDDR
Voilà comment clore un sujet, merci jchd.

Re: [R] Interrogation sur un code du tuto Autoit

Posté : mar. 13 mai 2014 09:22
par Chrnos023
Je test sur mon pc gamer.

Re: [R] Interrogation sur un code du tuto Autoit

Posté : mar. 13 mai 2014 09:39
par Chrnos023
true: 4507.9740313695
1: 4419.15756135952