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

Delphi Discussion :

Tmemo et lenteur affichage


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 31
    Points
    31
    Par défaut Tmemo et lenteur affichage
    Bonjour,

    J'ai une application qui reçoit beaucoup d'événements par seconde et je souhaite les afficher dans un Tmemo.
    Une fois que les événéments arrivent, le Tmemo commence l'affichage et je n'ai plus de control dessus. Je n'ai plus la main, les lignes deffilent.
    J'arrete alors l'agent qui envoie des log, les lignes deffilent encore pendant un moment (elles etaient dans un buffer je pense), puis ensuite lorsque toutes les lignes ont été affichées, je peux reprendre la main.
    J'ai pourtant un thread qui reçoit les informations de l'agent, c'est ce même thread qui fait le memo1.lines.add(Mon_information)...
    Le thread est crée dans le contexte de création de la fiche.
    Avez vous des idées ?
    Merci.

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    C'est pas très recommandé, voire proscrit, de manipuler les controls depuis un autre thread, sauf ce dernier à été synchronisé correctement.
    Ceci dit, s'il y a beaucoup de chose a écrire, rien n'empeche de mettre a jour l'interface qu'une fois par seconde, et pourquoi pas embrasser avec memo1.lines.BeginUpdate et memo1.lines.EndUpdate les memo1.lines.Add();
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 48
    Points : 31
    Points
    31
    Par défaut ...
    Bonjour,
    Merci pour la reponse.
    Que veux-tu dire dans "C'est pas très recommandé, voire proscrit, de manipuler les controls depuis un autre thread"
    Avec le beginupdate et endupdate, j'ai toujours le même pb, je perds la main sur l'application, sauf si je ferme l'application qui envoie les messages.
    Merci

  4. #4
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Citation Envoyé par Annaced
    Que veux-tu dire dans "C'est pas très recommandé, voire proscrit, de manipuler les controls depuis un autre thread"
    il manque l'essentiel: la fin de la phrase : "sauf ce dernier à été synchronisé correctement".
    Autrement dit, pour mettre a jour l'interface graphique depuis un thread il faut que ce dernier soit bien synchronisé avec le thread principal.

    Si ton code n'est pas trop long, donne-nous le, on y verra surement plus clair.

    Aussi, par quel moyen ton "agent" envoit des infos a ton application ? (réseau ?, messages windows ?, ...)
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    la mise a jour peut ce faire de façon plus global
    avec la methode text de memo il te suffit pour cela de lui affecter un string
    de cette facon tu ne garde que les derniere ligne mise à jour

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Au lieu de mettre à jour le memo à chaque écriture, on peut stocker les lignes dans une tstringlist et mettre à jour le memo périodiquement (exemple toutes les 3 secondes).
    Comme il me semble que la taille du memo, est limitée il faudrait seulement copier un nombre limité de caractères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    memo1.visible:=false ; // ca peut améliorer la vitesse d'affichage (à voir)
    if length(my_tstringlist.text)> maxmemolength
      then memo.text:=copy(my_tstringlist.text,length(my_tstringlist.text)- maxmemolength+1,maxmemolength) ; 
      else memo.text:=my_tstringlist.text 
    memo1.visible:=true;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. Lenteur affichage page web
    Par kyra2778 dans le forum Composants
    Réponses: 7
    Dernier message: 27/11/2009, 12h23
  2. [WD14] Lenteur affichage sur table/REQ
    Par buzz68180 dans le forum WinDev
    Réponses: 13
    Dernier message: 24/11/2009, 14h21
  3. Lenteur affichage photo
    Par albatof dans le forum wxPython
    Réponses: 6
    Dernier message: 23/06/2009, 20h00
  4. lenteur affichage fenetre
    Par Mandarine dans le forum VB.NET
    Réponses: 10
    Dernier message: 15/11/2007, 18h14
  5. Réponses: 10
    Dernier message: 02/07/2007, 19h09

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