-
fonction Synchronize
Bonjour,
Lorsque mon application est en fonctionnement, l'UC tourne à 50% sur un PC fixe et 100 % sur un protable. J'ai d'abord pensé à un problème de Timer qui se lance tout le temps. Mais même sans les Timers, je retrouve ce problème.
J'ai touré le problème, il était dûe à un thread permettant l'affichage qui tournait en permanence. J'ai décidé d'utiliser la méthode Synchronize, mais lorsque je la déclare, je ne la trouve nulle part.
Donc j'ai une erreur fonction undeclared et lorsque j'effectue une recherche sur mon PC, je ne la trouve pas. J'ai CheckSynchronize, mais pas de synchronize.
Je continue mes recherches, cependant si quelqun à déjà été confronté à ce problème, je suis curieux de savoir comment il l'a résolu.
Merci d'avance
Voici le liens vers la méthode expliquée
http://chgi.developpez.com/thread/
-
J'ai réussi à trouver mon erreur, mais je n'arrive pas au résultats voulu.
Dans une boucle for, je charge un TChart, mais aussi j'affiche sa progression dans une progress bar et je donne sont pourcentage dans un item d'une status bar.
Le hic est que la boucle for ne permet pas l'affichage, l'OS étant bloqué le temps de la boucle. Seul ma progress bar évolu. J'ai donc placé un Application->ProcessMessage() pour rendre la main et permettre l'affichage, mais l'affichage du TChart ralenti considérablement la boucle.
J'ai donc décidé de créé un thread spécifique à l'affichage du pourcentage, et de le mettre à jour via la méthode synchronize. Je voit bien en mode pas à pas que la valeur évolue, et qu'elle est bien inscrite mais elle ne s'affiche pas.
J'ai donc décidé de changer la priorité du thread, mais rien n'y fait.
S'il quelqun sait pourquoi, ou encore voit une idée pour remédier à ce problème d'affichage, je suis à son écoute.
Merci d'avance
-
J'ai finalement affiché mon pourcentage grâce au Canvas, qui est apparemment prioritaire en affichage. Donc dans ma boucle for j'ai une mise à jour de mon affichage par le Canvas et celle ci s'affiche nikel !
-
Bonjour,
j'avai aussi eu un probleme avec les threads... et j'ai fait autrement...
le mystere reste donc :P
PS: je l'ai pas dis avant car j'en voyai pas l'utilité ... la non plus tu me dira :lol:
lanonyme
-
Bonjour,
j'ai programmé y a quleques années un moteur de jeu d'échec.
Le programme est capable de résoudre des problèmes de mat.
Il est conçu pour bouffer toutes les ressources CPU disponibles:
je n'y ai pas mis de ProcessMessage dans les boucles critiques.
Eh oui, vitesse = performance pour une recherche de combinaisons échiquéennes.
A ma grande surprise, depuis que j'ai une nouvelle bécane avec la nouvelle gestion de la RAM, mon application ne consomme plus que 50% du CPU.
Je pense que c'est dû à l'astuce du 'Front bus' de la RAM annoncé à 800MHz, alors que les barettes de RAM tournent à 400MHz. Simplement le système permet d'accéder à 2 adresses mémoire sur un même front de bus. Donc 2 barettes à 400MHz équivaut à 1 barette tournant à 800MHz.
Et voila, sauf que mon appli compilé y a longtemp avec un VC++ du début, gère probablement mal le système Hyper Threading.
J'en viens au sujet de la discussion, l'application peut utiliser 100% de CPU sur un type de machine, et seulement la moitié sur un système Hyper Threading.
J'espère que je ne suis pas hors sujet :D
@+
-
Mon problème était que je voulais afficher l'état de cette boucle, vu qu'elle est longue et ainsi évité à l'utilisateur de penser qu'elle est "planté", mais cette affichage ne se faisait qu'une fois la boucle terminée sauf pour la progression d'une ProgressBar. Je passait pas la mise de texte dans une StatusBar.
Chose étrange pour moi de voir la mise à jour de la ProgressBar dans ma boucle, mais pas d'un texte !!! Finalement, j'ai remarqué que la modification du Canvas avait la même priorité que la ProgressBar.
J'ai donc affiché mon Texte par le Canvas avec TextOut et miracle, je vois mon texte se mettre à jour pendant la boucle. Je n'ai donc pas de perte de performance, vu que je n'ai plus de ProcessMessage par contre, il est vrai que cette boucle demande donc de la ressource.
50% sur un PC fixe et 100% sur un portable. Ceci est surment du au phénomène que tu as expliqué.