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

API, COM et SDKs Delphi Discussion :

Problème de priorité de thread


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Par défaut Problème de priorité de thread
    Bonjour a tous, je travaille sur un logiciel de de type VNC. Lorsqu'un client se connecte au serveur la fentre principale de celui-ci se minimize pour éviter de la voire dans la capture d'écran. Le probleme c'est qu'en faisant cela mon frame rate chute de maniere dramatique a 10fps, alors qu'il tourne a 35/40 fps lorsque la fenetre (Form) du serveur est active. J'ai essayé de forcer la priorité du thread de capture d'écran a une priorité maximale mais rien n'y fait. Avez vous une idée pour remédier a ce petit soucis.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Par défaut Complénment d'information
    J'ai essayé de reduire le champs de mes investiguations, j'ai donc developpé une appli avec le strict minimum:
    1er test (dans un thread)
    - capture d'écran, taille de la capture hard codée 1024 x 768
    - comparaison avec la capture précédente
    - envoie au client de la différence entre les 2 captures
    Résultat => 10 a 12 fps

    2eme test (dans un thread)
    - capture d'écran mais la taille de la capture est déterminée par une "Form", (ce qui permet facilement de donner la possibilité de choisir la taille et l'endroit de la capture) Pour que je puisse comparer la taille de la fenetre est la meme que pour le test 1, a savoir 1024x768
    - comparaison avec la capture précédente
    - envoie au client de la différence entre les 2 captures
    Résultat => 20 a 22fps
    Ce qui est curieux c'est que si je minimize la "Form" je retombe a 12fps !! C'est incompréhensible car cette forme n'est utilisée que pour définir au début la taille de la capture mais il semble que pour une raison inconnue j'ai de bien meilleurs perfs lorsque celle ci est affichée ou quand elle n'exite pas, cas n1 ou la taille est hard codée...

    Avez vous une idée de ce que qui peut expliquer ce phénomène ?

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    quelle version de Delphi ? comment gères-tu tes thread ? utilises-tu synchronize ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Par défaut
    Bonjour,

    J'utilise delphi 2010, il y a juste un Thread qui:
    1- fait une capture d'écran
    2- compare avec la capture précédente et extrait la différence
    3- envoie au client la nouvelle image

    je n'affiche rien sur le serveur.

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    d'après ton énoncé la seule différence est que le Thread exploite un TForm pour connaître les dimensions de la capture ? c'est ça ?

    et tu récupères les dimensions directement de Tform.Width et Height ?

    dans ce cas essaie en déclarant FWidth, FHeight: Integer dont la valeur est déterminée dans le OnResize de la fiche. Du coup le thread lit directement ces valeurs sans passer par le composant et ce qu'il y a derrière (je sais pas trop si ça va jusque l'API Windows).
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Par défaut
    Merci pour le conseil je vais essayer.
    Si cela vous intéresse j'ai posté le "job" sur vworker (RentACoder) avec la source du server et le client car cela dépasse largement mes compétances.
    http://www.vworker.com/RentACoder/mi...20113305170118

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Par défaut
    Bonjour,

    J'ai pu avancer un peu. La fenetre qui permet de sélectionner la zone a capturer est du type "transparente". Lorsqu'elle est au premier plan le fps est élevée, j'ai essayé de réduire cette fenetre pendant la capture puisque, en effet celle-ci n'a pas d'impact une fois que la capture est lancée. Et en réduisant les dimensions de la fenetre le frame rate évolue plus elle est grande plus le frame rate est élevée plus je la réduit plus il diminue. La seule explication c'est que pour une raison quelconque lorsque la fenetre est au premier plan le syteme n'effectue plus certaines taches et la capture est donc plus rapide. Qu'en pensez vous ?

  8. #8
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut


    je ne sais si avec les nouvelles versions de windows c'est toujours d'actualité, mais il me semblait que l'application ayant la fenêtre active dans le système avait une priorité "légèrement" plus élevée que les autres non ?

    cela me fait penser, as-tu songé à changer le niveau de priorité de ton application ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Par défaut
    Bonsoir, oui j'ai essayé de modifier la priorité du thread mais cela ne change aps grand chose, de plus cela n'explique pas pourquoi lorsque je redimentionne la fenetre de capture cela a un impacte +/- négatif suivant sa taille, plus elle est grand plus le frame rate est important ca n'as pas de sens.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Par défaut
    Bonjour,

    A défaut d'avoir trouvé la solution a mon problème, j'ai trouvé une solution mais qui ne me satisfait qu'a moitié puisque je n'arrive toujours pas a expliquer le phénomène.
    La solution est, une fois que j'ai sélectionné la zone a capturer, de rendre la fenêtre transparente avec WS_EX_TRANSPARENT. Le frame rate reste alors a son maximum.
    Ce que je n'arrive pas a comprendre c'est pourquoi lorsque celle-ci est opaque ou réduite les FPS est bas lorsque celle-ci est affichée et transparente ou semi transparente le FPS est élevé !! de quelle maniere cela peut-il impacter de manière aussi significative la capture d'écran que j'effectue avec Bitblt ?

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

Discussions similaires

  1. problème de priorité des threads
    Par wauant dans le forum C
    Réponses: 4
    Dernier message: 18/04/2007, 08h51
  2. problème de priorité des threads
    Par wauant dans le forum Développement
    Réponses: 1
    Dernier message: 12/04/2007, 10h49
  3. Problème de création de thread
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 21h58
  4. [Postgres 8]Problème de priorité des requètes
    Par julienOriano dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 28/12/2005, 12h36
  5. Problème de creation de thread sous linux
    Par xilebo dans le forum POSIX
    Réponses: 4
    Dernier message: 27/10/2004, 09h58

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