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

Threads & Processus C++ Discussion :

[Windows Thread] Paramètre struct avec référence.


Sujet :

Threads & Processus C++

  1. #1
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut [Windows Thread] Paramètre struct avec référence.
    Bonjour tout le monde,

    J'ai un souci avec un de mes projets, je dispose d'une application avec 2 threads, ( le main et le rendu opengl).
    Ceci fonctionne bien, sauf vous vous doutez bien, un truc!
    Alors pour commencer j'ai une classe qui manage mon thread de rendu avec une structure définissant le paramètre de ce 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
    class RenderingThread
    {
         /* ...........  */
    template<typename Platform>
    struct Param
    {
    	const Platform &m_platform;
    	const CEL::WindowConfiguration& m_windowConfiguration;
    	RenderingThread<GraphicAPI,Platform>& m_renderThread;
     
    	Param(	const Platform & _platform, const CEL::WindowConfiguration& _windowConfiguration, RenderingThread<GraphicAPI,Platform>& _renderThread)
    			:m_platform(_platform),	
    		         m_windowConfiguration(_windowConfiguration),
    			 m_renderThread(_renderThread)
     
    			{}
    };
     /* ...........  */
    }
    Platform est ici une classe Win32 qui créer/ouvre la fenêtre etc...
    CEL::WindowConfiguration est une structure de ce type :
    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
    struct WindowConfiguration
    	{
    		Int m_height;
    		Int m_width;
    		Int m_posX;
    		Int m_posY;
    		Bool m_fullscreen;
    		Bool m_vSync;
    		String m_appName;
    		Int	 m_FPS;
     
    		Int m_glBuffer;
    		Int m_glRedBits;
    		Int m_glGreenBits;
    		Int m_glBlueBits;
    		Int m_glAlphaBits;
    		Int m_glDepthBits;
    		Int m_glStencilBits;
    Et RenderingThread<GraphicAPI,Platform> est tout simplement la classe qui va me servir a faire des appels des rendus.

    A la création du thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RenderingThread<GraphicAPI,Platform>::Param<Platform> *param = CELNew RenderingThread<GraphicAPI,Platform>::Param<Platform>(_platform,_windowConfiguration,*this);
    			m_renderThread = Management::ThreadManager::Get().CreateThread(MainRendering<GraphicAPI,Platform>,param);
    Je créer la structure sur le heap et créer le thread.

    Dans ma Routine du thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template<typename GraphicAPI,typename Platform>
    static CELThreadRoutine MainRendering(Void *param)
    {
    	RenderingThread::Param<Platform> *renderParam = reinterpret_cast<RenderingThread::Param<Platform>*>(param);
    	RenderingThread<GraphicAPI,Platform>& renderThread(renderParam->m_renderThread);
    	if(renderThread.m_interfacer.Init(PlatformInterface<Platform,GraphicAPI>::GetParam(renderParam->m_platform),renderParam->m_windowConfiguration)== CEL::FctError)
    		return FctError;
    Je récupère le paramètre de type RenderingThread:aram<Platform>*

    Lorsque je passe mon paramètre renderParam->m_windowConfiguration à m_interfacer.Init par référence, lors de l'appelle d'une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChoosePixelFormat(reinterpret_cast<HDC>(_displayID), &m_pixelFormatDescription);
    dans la méthode Init, le paramètre _windowConfiguration devient n'importe quoi, à savoir des valeurs -8979032, et des <Bad Ptr>... Sachant que dans cette méthode ce paramètre n'est jamais utilisé. J'ai remarqué que ce problème n'est pas présent dans cette fonction si on utilise _windowConfiguration par copie. Mais dans ce cas la c'est dans la fonction appelante ( Routine du thread ) que la structure se retrouve avec ces valeurs.

    J'avoue ne pas comprendre ce bord*l.
    Si une personne à le courage et la patience de trouver une possible solution

    Merci

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Je rajoute une précision, si je met en copie WindowConfiguration dans la struct en paramètre du thread je n'ai plus aucun problème. Par contre si je passe celle-ci en référence je me retrouve avec ce problème.
    Une idée du pourquoi et du comment?
    Merci

  3. #3
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Bon ne vous fatiguer pas... Un reboot de la machine et un rebuild All et hop... plus de problème! Encore un problème de build...

    Merci quand même pour ceux qui ont eu le temps de lire! mais n'hésitez pas à commenter, je suis toujours preneur des critiques!

    Merci

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/10/2013, 14h20
  2. threads et fonction avec plusieurs paramètres
    Par stevelaclasse dans le forum C
    Réponses: 1
    Dernier message: 03/04/2011, 14h02
  3. Réponses: 4
    Dernier message: 28/10/2010, 10h21
  4. paramétrer ADOConnection avec des variables
    Par ouckileou dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 08h11

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