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 :

Probl�me d'affichage de signaux � l'�cran


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut Probl�me d'affichage de signaux � l'�cran
    Bonjour � tous

    Je doit concevoir un logiciel charg� d'afficher une s�quence de signaux � l'�cran (Textes et sigles)

    Mon souci est le suivant

    Quand j'effectue un test de mon logiciel dans XE3 directement (Ex�cution), aucun souci d'affichage
    Lorsque j'ex�cute le logiciel directement en lan�ant l'ex�cutable il y a des signaux qui n'apparaissent pas.

    Est-ce que quelqu'un aurait une id�e.

    Mes signaux je les dessine sur le Canvas avec la fonction TextOut
    La form est en double Buffer
    Le temps d'affichage de mes signaux est d�termin� par un Thread qui calcule le temps (QUERY_PERFORMENCE COUNTER) et qui renvoit un bool�en � true au programme quand le temps impartit au Signal est termin� pour qu'il passe au suivant.
    Je ne voulais pas utiliser un Timer car trop impr�cis et je ne voulais pas non plus que le programme soit bloquant pendant un Signal pour pouvoir interrompre une s�quence.

    Merci d'avance pour votre aide

  2. #2
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Citation Envoy� par kurul1 Voir le message
    Quand j'effectue un test de mon logiciel dans XE3 directement (Ex�cution), aucun souci d'affichage
    Lorsque j'ex�cute le logiciel directement en lan�ant l'ex�cutable il y a des signaux qui n'apparaissent pas.
    Quand tu lances l'ex�cutable directement, est-ce qu'il y a une diff�rence de mode de compilation (DEBUG/RELEASE) ?
    Ex�cution dans l'IDE en compilant en debug ou en release...
    Ex�cution en dehors en compilant en debug ou en release...
    (Comportement diff�rent en debug et en release: pr�somption de variable non initialis�e)
    Citation Envoy� par kurul1 Voir le message
    Est-ce que quelqu'un aurait une id�e.

    Mes signaux je les dessine sur le Canvas avec la fonction TextOut
    La form est en double Buffer
    Le temps d'affichage de mes signaux est d�termin� par un Thread qui calcule le temps (QUERY_PERFORMENCE COUNTER) et qui renvoit un bool�en � true au programme quand le temps impartit au Signal est termin� pour qu'il passe au suivant.
    Comment se fait la comm entre ton thread de gestion des signaux et le thread principal de l'appli ? Comment le thread principal est-il pr�venu qu'il doit mettre � jour l'affichage ?
    Tu parles d'un bool�en... C'est une variable ? Si c'est le cas est-ce que tu as fait gaffe � bien g�rer les acc�s concurrents sur cette variable (section critique par exemple) ?

  3. #3
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Merci pour ta r�ponse totoche76

    Alors apr�s les diff�rents tests que tu m'as conseill�
    Ex�cution dans l'IDE identique entre Debug et Release cela fonctionne normalement
    Ex�cution ext�rieure identique entre Debug et Release il y a certains signaux qui n'apparaissent pas.

    Concernant la gestion du Thread

    J'ai d�clar� dans le Thread 2 variables
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    	// Booléen pour savoir si le Thread à terminé
    	bool Termine;
     
    	// Temps
    	int Temps;
    Le Constructeur de mon Thread a des param�tres
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Constructeur avec paramètres
    __fastcall MonThread::MonThread(bool CreateSuspended, int Tps)
    	: TThread(CreateSuspended), Temps(Tps)
    {
    	// On met le booléen pour marquer la fin du Thread à false
    	Termine = false;
    }

    Voil� ce que je fait dans la fonction Execute du Thread
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    void __fastcall MonThread::Execute()
    {
    	static __int64 FrequenceHorloge;
    	static __int64 Debut;
    	static __int64 Fin;
     
    	// On initialise le tempsCourant à 0
    	double TempsCourant = 0;
     
    	// booléen pour la sortie de boucle
    	bool Sortie = false;
     
    	// On calcule la fréquence de l'horloge
    	QueryPerformanceFrequency((LARGE_INTEGER*)&FrequenceHorloge);
     
    	// On calcule le temps de départ
    	QueryPerformanceCounter((LARGE_INTEGER*)&Debut);
     
    	do
    	{
    		Application->ProcessMessages();
     
    		// On calcule la Fin
    		QueryPerformanceCounter((LARGE_INTEGER*)&Fin);
     
    		// On calcule le Temps Courant
    		TempsCourant = (1000 * ((Fin - Debut) / (double)FrequenceHorloge));
     
    		// Si l'on à atteint le Temps ou que l'on doit terminé le Thread
    		if(Termine || (TempsCourant >= double(Temps)))
    		{
    			// On sort de la boucle
    			Sortie = true;
    		}
    	}
    	// Tant que l'on ne doit pas sortir de la boucle
    	while(!Sortie);
     
    	// On marque que l'on à terminé
    	Termine = true;
    }
    Et donc voil� comment j'appelle et communique avec le Thread dans le programme principal

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    	// On lance le Thread
    	Thread = new MonThread(false, Temps);
     
    	// On marque qu'il faut nettoyé à la sortie du Thread
    	Thread->FreeOnTerminate = true;
     
    	// Tant que le Thread n'est pas terminé
    	while(!Thread->Termine)
    	{
    		// Si l'on doit quitter l'application
                    // La variable QuitterApplication est mise à true lorsque l'on tape echap au clavier (OnKeyPress)
    		if(QuitterApplication)
    		{
    			// On termine le Thread
    			Thread->Termine = true;
    		}
     
    		Application->ProcessMessages();
    	}
    L'affichage est g�r� dans le programme principal, il est fait avant l'appel du Thread et lorsque le Thread est termin�, on passe a l'affichage du Signal suivant

  4. #4
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void __fastcall MonThread::Execute()
    {
    ....
     	do
    	{
    		Application->ProcessMessages();
    Houlaaaaaa.....
    D�j�, gros m�lange des genres: Application->ProcessMessages() c'est pour g�rer la boucle des messages associ�e au thread principal, donc quand tu es dans un autre thread, c'est "pas touche".

    Comment est g�r� l'affichage dans le thread principal ?? Tu dessines directement sur le Canvas du form ??? Tu g�res bien l��v�nement OnPaint du form ??
    Si le but du thread est juste de faire une tempo, un Sleep suffit.... Pas besoin de compteurs de performance pour �a.
    EDIT-
    (bon ok Sleep n'est pas tr�s pr�cis, admettons...)
    Remplaces Application->ProcessMessages() par un Sleep(1) ou Sleep(10) (quelques ms de d�calage pour ta affichage, �a devrait aller, non ?)
    -EDIT
    Et tes signaux ? tu as une liste de signaux � afficher, chacun avec un temps d'affichage associ�, c'est �a ?? Cette liste �volue au cours de l'ex�cution de l'appli ?

  5. #5
    Membre �clair� Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par d�faut
    Pour le Process Message je l'enl�ve sans souci petite erreur

    Sinon concernant l'affichage, oui je dessine directement sur le Canvas mais je n'utilise pas le OnPaint je le fait directement dans une fonction qui dessine sur l'�cran, surement une autre erreur de ma part, je vais essayer de modifier mon programme pour voir si cela fonctionne mieux.

    Concernant le Sleep que tu me propose, il est bloquant c'est � dire que tant qu'il n'est pas termin� les �v�nements clavier ne sont pas pris en compte et ce n'est pas ce qui m'int�resse et connaissant la pr�cision des Timer, j'ai opt� pour cette solution pour avoir un temps plus pr�cis

    Concernant les Signaux, c'est une liste qui est fixe pour un Protocole donn� elle n'�volue pas pendant le cycle d'affichage.

    Un Signal est en fait un texte � afficher avec un arri�re-plan, une couleur, une taille et une police d�termin�e.

  6. #6
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Citation Envoy� par kurul1 Voir le message
    Sinon concernant l'affichage, oui je dessine directement sur le Canvas mais je n'utilise pas le OnPaint je le fait directement dans une fonction qui dessine sur l'�cran, surement une autre erreur de ma part, je vais essayer de modifier mon programme pour voir si cela fonctionne mieux.
    Je suppose que si tu faisais passer une autre fen�tre par dessus ton appli, les choses que tu avais dessin�es sur le Canvas avaient disparues quand la fen�tre de ton appli redevenait visible, non ?
    Citation Envoy� par kurul1 Voir le message
    Concernant le Sleep que tu me propose, il est bloquant c'est � dire que tant qu'il n'est pas termin� les �v�nements clavier ne sont pas pris en compte et ce n'est pas ce qui m'int�resse et connaissant la pr�cision des Timer, j'ai opt� pour cette solution pour avoir un temps plus pr�cis
    ??? Ok, si tu fais un sleep dans le thread principal, celui-ci est bloqu� le temps du sleep et c'est normal que rien ne soit pris en compte. Maintenant, c'est l'int�r�t d'un thread secondaire: tu y fais un sleep, il n'a pas d'impact sur ce qui se passe dans le thread principal... Tes �v�nements clavier ne sont pas g�n�s (� moins d'une autre bourde dans le thread principal) par ton thread secondaire.

Discussions similaires

  1. Gros probl�mes d'affichage sur �cran 16/9
    Par slylafone dans le forum C++Builder
    R�ponses: 7
    Dernier message: 25/07/2006, 09h33
  2. Probl�me d'affichage d'un �crans
    Par tribaleur dans le forum P�riph�riques
    R�ponses: 20
    Dernier message: 20/06/2006, 07h31
  3. Probl�me d'affichage sur un �cran 16/9�me
    Par kurul1 dans le forum C++Builder
    R�ponses: 2
    Dernier message: 23/01/2006, 11h51
  4. Probl�me d'affichage en plein �cran
    Par kurul1 dans le forum C++Builder
    R�ponses: 2
    Dernier message: 18/11/2005, 14h43
  5. Probl�me d'affichage d'une cha�ne � l'�cran
    Par Bubonik software dans le forum C
    R�ponses: 7
    Dernier message: 08/05/2004, 20h47

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