Bonjour,
Ce n'est pas AP qui consomme directement beaucoup de temps mais le traitement des messages en attente, notamment ceux qui concernent l'affichage. Par exemple, une simple barre de progression consomme beaucoup de ressources et si elle est mise à jour 100 fois par seconde, d'une part cela ne sert à rien, mais en plus pénalise le traitement suivi.
La solution du compteur proposée par Jérôme est simple et efficace mais suppose d'avoir une bonne idée du facteur de réduction souhaitable. J'utilise plutôt le temps qui est moins sensible à l'endroit où mettre l'appel. Cependant GetTickCount64 n'est pas garant d'un temps exact car il dépend de la machine (on peut cependant précalculer automatiquement un deltaTick correspondant à, par exemple, 1/10 s).
Code:
1 2 3 4 5
| TickNew := GetTickCount64;
if TickNew - TickOld > 100 then begin // Mode rapide : laisser l'application réactive
TickOld := TickNew;
Application.ProcessMessages;
end; |
La solution des threads de Jérôme est certainement la meilleures mais elle demande sans doute des modifications conséquentes du code.
Salutations