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

Visual C++ Discussion :

erreur à la création de thread


Sujet :

Visual C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut erreur à la création de thread
    coucou à tous, j’ai une erreur lors de ma création de la thread, j’ai consulté la faq mais pas possibilité de voir ou je me suis trompé.
    Voyer vous ou je me suis planter ?

    voici mes déclaration dans la class:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    HANDLE      m_watchEvent;
    DWORD       m_threadID;
    ...
    static DWORD WINAPI  CommWatchProc(LPVOID pParam);
    ...
    la structure suivante est global et contient des informations sur mon application pourvant être modifier lors du thread:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct structthreadinfo
    {
    	HANDLE      *m_hCom;
    	DWORD       *m_threadID;
    	HANDLE      *m_watchThread;
    	OVERLAPPED	*m_ovRead;
    	bool		*testencour;
     
    }threadinfo;
    threadinfo info;
    voici de début de ma fonctionCommWatchProc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DWORD WINAPI  CCom::CommWatchProc(LPVOID pParam)
    {
         structthreadinfo *threadinfo = reinterpret_cast< structthreadinfo *>( pParam);
    ...
    et pour finir la création de mon thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DWORD dwCreationFlags=0;
    DWORD dwStackSize=0;
    ...
    com.m_watchThread = CreateThread((LPSECURITY_ATTRIBUTES )NULL, 
    (DWORD)dwStackSize, 
    (LPTHREAD_START_ROUTINE)CommWatchProc, 
    (LPVOID)&info, 
    (DWORD)dwCreationFlags,	
    (LPDWORD)&com.m_threadID);
    voici l'érreur signalé
    error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
    je vous remercie d'avance

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct structthreadinfo
    {
    	HANDLE      *m_hCom;
    	DWORD       *m_threadID;
    	HANDLE      *m_watchThread;
    	OVERLAPPED	*m_ovRead;
    	bool		*testencour;
     
    }threadinfo;
    threadinfo info;
    Essaye ça pour voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct structthreadinfo
    {
    	HANDLE      *m_hCom;
    	DWORD       *m_threadID;
    	HANDLE      m_watchThread;
    	OVERLAPPED	*m_ovRead;
    	bool		*testencour;
     
    }threadinfo;
    threadinfo info;
    Hope it helps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    1. Premièrement, tu es bien en Win32 et non en MFC, hein ?
    2. Supprime les casts, surtout sur les pointeurs et le pointeur de fonction. Les casts de pointeurs de fonction, c'est le mal.
      Et n'oublie pas que tout pointeur se caste implicitement en LPVOID.
    3. Utilise des casts C++ quand tu dois caster. C'est un peu plus long à écrire, mais ça peut éviter bien des erreurs de l'utilisateur.
    4. Si ton thread utilise des fonctions de la C Run-time library, utilise _beginthreadex() (déclarée dans <process.h>) au lieu de CreateThread(). À ce moment, le type de retour de ta fonction devra être UINT au lieu de DWORD.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    l'erreur est au niveau du CreatThread(...,CommWatchProc,...).

    mais crois avoir trouvé mon Erreur...
    CommWatchProc fait parti d'une class "CCom"...
    je creer mon thread dans un dialog...
    donc j'ai fait CreatThread(...,com.CommWatchProc,...)

    mon erreur à disparue, mais j'en est un nouveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error LNK2005: "struct structthreadinfo info" (?info@@3Ustructthreadinfo@@A) already defined in SerialCom.obj
    j'ai supprimer "info" des paramètres de la fonction mais l'erreur est toujour la...

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Consulte l'entrée de FAQ sur les variables globales ou utilise une variable de classe statique.

    Et utilise CCom::CommWatchProc au lieu de com.CommWatchProc : Cela montre bien que c'est une fonction statique.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    Points : 22
    Points
    22
    Par défaut
    je passer ma structure en STATIC et c'est ok
    merci

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

Discussions similaires

  1. Problème de création de thread
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 21h58
  2. [Sessions] Message erreur PHP création de session
    Par Ylias dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2005, 11h11
  3. Réponses: 26
    Dernier message: 27/04/2005, 11h29
  4. Réponses: 3
    Dernier message: 12/11/2003, 15h57

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