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 confirm�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    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�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    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.

  3. #3
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 confirm�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 confirm�
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    67
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 67
    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