Salut Denis,
c'est un peu la rencontre du 3ième type, le départ de ton sujet ! Mais la question mérite encore et toujours d'être posée.
Car, justement un des atouts de PB c'est d'avoir un excellent contrôle du processeur assez facilement.
On a donc
Delay(xEnMillisecondes) qui vient théoriquement "libérer" le processeur, c'est-à-dire rendre la main à l'OS (Windows, Linux, ou Mac).
Qu'est-ce que ça fait de libérer le CPU? Déjà, ça évite que le ventilo se déclenche, donc ça fait moins de bruit (le bruit du ventilo me parasite beaucoup, personnellement...). Ensuite, ça économise en batterie, si on est sur un ordinateur portable non branché. Enfin, ça permet à l'OS de triturer sa mémoire, activité qu'on ne peut absolument pas contrôler, et que, l'OS adore faire : trier son souc, virer des morceaux de mémoire préalablement déclarés supprimés, enregistrer sur disque (ou SSD) des blocs mémoire trop rarement utilisés pour rester occuper de la RAM, etc...
Voilà, et tout ça, on l' <<autorise>> grâce à l'instruction
Delay(DuréeEnMillisecondes).
Quelques points importants :
1) il n'y a pas meilleur programmeur (et ce n'est pas mon cas !) que celui qui teste et mesure les différentes réactions possibles de l'instruction
Delay() selon le type d'OS en fonctionnement. En effet, Windows et Linux ne réagissent pas pareil : Windows, si nécessaire, dès lors qu'on lui offre une milliseconde de répis, avec un
Delay(1), peut très bien
s'octroyer le CPU par paquet de 16 millisecondes. C'est son truc. Du moins, ça l'a été pendant longtemps, si ça ne l'est plus ! À côté de Windows,
Linux, si tu lui offre une milliseconde, il semble qu'il te prend cette millisecondes, si besoin, et pas plus.
Conséquence : Windows et Linux vont avoir deux comportements différents, sauf si on contraint Linux à la même sauce que Windows avec des
Delay() calibrés sur des multiples de 15 à 16 millisecondes. (15, 33, 45, etc...)
2) Mais ça, c'est sur les bécanes qui n'ont qu'un CPU donc les anciennes bécanes. Linux a pris de l'avance sur Windows (qui s'est peut-être rattrapé à ce sujet, je l'ignore...) en redonnant la main immédiatement au programme si un CPU est libre. On lui offre une millisecondes (avec
Delay(1) ) et Linux refuse cette offre s'il voit un ou plusieurs CPU de libre : la milliseconde c'était pour le CPU saturé. Donc, on se retrouve théoriquement à devoir
compter les CPUs et devoir exécuter autant de Delay(1) qu'il n'y a de CPU libres. (Je fais un peu l'amalgame CPU et coeur...) pour voir sa milliseconde de repos CPU réellement reposer l'électronique. Donc, une vraie boucle d'attente est possiblement nécessaire :
Code : Tout sélectionner
t0 = ElapsedMilliseconds()
Repeat
Delay(1)
Until ElapsedMilliseconds() > t0 + 1 ; <<< 1 = la vraie milliseconde de repos
3) Enfin, ça rejoint Marc : WaitWindowEvent() agit comme cette boucle, si aucun évènement n'arrive.
4) Pour finir, en mode graphique,
FlipBuffers() contient , il me semble, aussi en interne, depuis plusieurs années une telle boucle pour exécuter réellement cette attente.
Voilà les grandes lignes des subtilités pour reposer son processeur central...
Bon courage et excellente prog.
PS : perso, j'ai un mono-processeur mono-core acheté 170 euros chez Aldi en 2020. C'est un portable 12V, donc se branche sur un allume-cigare. Il est tactile comme les Android mais avec un X64 d'Intel et son écran est pliable à 360 degrés, donc j'ai une sorte de grosse tablette tactile, quand il est complètement déplié, et un ordinateur portable, quand l'écran est déplié comme les ordinateurs portables. Effectivement, le temps processeur reste une donnée importante à traiter. Et la démo de pureBasic y défonce les performances calamiteuses de javaScript sur Android. Je suis d'ailleurs très étonné aussi par la vitesse efficace du CPU : c'est 1.1GHz mono-core, et il dégomme par 4 fois un quad core 2.6GHz. Sans parler des chutes de boulet qu'il subit sans broncher : 1m50 sur carrelage ne lui a pas faire peur du tout.
[Edit] Après de succintes recherches, mon petit ordi a quatre coeurs en fait, et sa fréquence d'horloge change selon les besoins demandés et l'alimentation fournie. Pour retomber sur la question du sujet, je me demande si, justement un
Delay() n'est pas la seule instruction à utiliser. Exemple : si la temporisation est d'heure, mettre un délai de 3 600 000...