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 :

_endthread() et _beginthread() undeclared identifiers


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut _endthread() et _beginthread() undeclared identifiers
    Salut à tous;

    dans mon programme en c++, je suis amené à utiliser le multithreading, sauf que... les fonctions _endthread() et _beginthread() ne sont pas reconnu lors de la compilation et j'ai les erreurs suivantes :
    error C2065: '_endthread' : undeclared identifier
    error C2065: '_beginthread' : undeclared identifier
    sachant que j'ai bien ajouté le header <process.h>

    PS : j'utilise vc++ 6.0

    Merci bp de m'aider et très bonne journée!!!

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    * If you are using the Visual C++ development environment, select the
    * Multi-Threaded runtime library in the compiler Project Options dialog
    * box.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    1. Comme il dit, sauf que tu as le choix entre multithread (/MT) et multithread DLL (/MD).
    2. _beginthread() et _endthread() ont des problèmes qui peuvent les rendre déconseillable. Si possible, utilise _beginthreadex(), _endthreadex() et CloseHandle() (déclaré en incluant <windows.h>) à la place.
      Citation Envoyé par MSDN
      It is safer to use _beginthreadex than _beginthread. If the thread spawned by _beginthread exits quickly, the handle returned to the caller of _beginthread may be invalid or, worse, point to another thread. However, the handle returned by _beginthreadex has to be closed by the caller of _beginthreadex, so it is guaranteed to be a valid handle if _beginthreadex did not return an error.
      Par contre, CloseHandle() nécessitera un cast du uintptr_t retourné en HANDLE.
    3. Simple curiosité: Tu programmes en C ou en C++ ? Si tu es en C++, l'opérateur de cast à utiliser utiliser sera reinterpret_cast<>.
    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é
    Inscrit en
    Octobre 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 117
    Par défaut
    Merci!! mais malheureusement je suis tenue d'utiliser _endthread() et _beginthread().
    Cependant j'ai ajouter /MD dans les project options et ça marche... out les undeclared identifier , mais bonjour:
    error C2664: '_beginthread' : cannot convert parameter 1 from 'void *' to 'void (__cdecl *)(void *)'

    a quoi sert excatement _cdecl???
    voici le prototype de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     _beginthread((void *) query_processing, 0, (void *)free_process);
    Merci beaucoup!!!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    hou làà ...
    quel est le prototype de ta fonction query_processing ?

    Il doit être celui-ci :
    void query_processing(LPVOID par)

    (avec LPVOID --> void*)
    _beginthread attend (en 1er paramètre) un pointeur sur une fonction de proto : void f(void*)

    et non pas un void *

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Mince, ils sont compliqués, ces types.

    _beginthread() demande void query_processing(void *par)
    _beginthreadex() demande unsigned int __stdcall query_processing(void *par)
    CreateThread() demande unsigned long __stdcall query_processing(void *par)

    Par qui es-tu tenue d'utiliser _beginthread()/_endthread() ?
    Qui est assez idiot pour forcer l'utilisation de ces fonction-là quand les fonctions supérieures, toutes aussi non-standard, sont plus sûres ?
    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.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/11/2006, 17h08
  2. encore undeclared identifier
    Par mamok dans le forum MFC
    Réponses: 5
    Dernier message: 07/02/2006, 15h51
  3. Réponses: 5
    Dernier message: 26/01/2006, 15h13
  4. [ECO] - IOCLService - Undeclared identifier : "Evaluate
    Par RamDevTeam dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 16/01/2006, 18h21
  5. Erreur Undeclared identifier
    Par jagboys dans le forum MFC
    Réponses: 2
    Dernier message: 16/11/2005, 16h24

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