IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

fonction Synchronize


Sujet :

C++Builder

  1. #1
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut 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/

  2. #2
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    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

  3. #3
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    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 !

  4. #4
    Membre actif
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    j'avai aussi eu un probleme avec les threads... et j'ai fait autrement...
    le mystere reste donc

    PS: je l'ai pas dis avant car j'en voyai pas l'utilité ... la non plus tu me dira
    lanonyme

  5. #5
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    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

    @+
    @ bientôt...

    Salut & @+ sur 3W!

  6. #6
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    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é.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel synchrone d'une fonction java depuis ACS3
    Par IDevlope dans le forum Flex
    Réponses: 0
    Dernier message: 31/01/2012, 16h45
  2. fonction synchrone asynchrone
    Par akrlot dans le forum C
    Réponses: 12
    Dernier message: 28/09/2007, 14h34
  3. Questions sur les sockets (fonctions synchrones)
    Par azerty25 dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 29/06/2007, 00h57
  4. Réponses: 4
    Dernier message: 09/05/2007, 10h04
  5. Thread -> Utiliser Synchronize() dans une fonction
    Par Futixu dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/01/2007, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo