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++ Discussion :

Les threads


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de Ekinoks
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par d�faut Les threads
    Salut,
    J�ai un probl�me avec les threads :^/
    J�assaille de passer en param�tre une variable dans un thread mais cela ne marche pas en C++ par contre en C �a marche :^/

    Voici le code que j'utilise :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DWORD WINAPI th(LPVOID p)
    {
        char * parametre = (char*) p;
        //...
    }
     
    main()
    {
        CreateThread(NULL, 0, th , &"3", 0, NULL);
        //...
    }
    Savez-vous pourquoi ce code marche qu�en C et pas en C++ et qu�es qu'il faut faire pour rem�dier � �a ?

    Merci

  2. #2
    Inactif  

    Homme Profil pro
    Ing�nieur test de performance
    Inscrit en
    D�cembre 2003
    Messages
    1 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur test de performance
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 986
    Par d�faut Re: Les threads
    Citation Envoy� par Ekinoks
    Salut,
    J�ai un probl�me avec les threads :^/
    J�assaille de passer en param�tre une variable dans un thread mais cela ne marche pas en C++ par contre en C �a marche :^/

    Voici le code que j'utilise :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DWORD WINAPI th(LPVOID p)
    {
        char * parametre = (char*) p;
        //...
    }
     
    main()
    {
        CreateThread(NULL, 0, th , &"3", 0, NULL);
        //...
    }
    Savez-vous pourquoi ce code marche qu�en C et pas en C++ et qu�es qu'il faut faire pour rem�dier � �a ?

    Merci
    Salut.

    Ben moi �a marche en C++...

  3. #3
    Membre �clair� Avatar de Ekinoks
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par d�faut
    Ca alors !
    moi le compilateur me met ca :
    - invalid conversion from `const void*' to `void*'
    - initializing argument 4 of `void* CreateThread(_SECURITY_ATTRIBUTES*, DWORD, DWORD (*)(void*), void*, DWORD, DWORD*)'

  4. #4
    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
    Eh bien, �trangement, on dirait que ton &"3" (qui n'est pas un char *, mais plut�t un char **, � mon avis ce n'est pas ce que tu voulais) est interpr�t� comme un pointeur vers des donn�es constantes (const void *). En C++, on ne peut pas le convertir directement en void * : il te vaut soit un cast de type C, soit un const_cast


    Edit: � propos du &"3" devenant un const void *, il semblerait que le compilateur C++ (celui de Visual, du moins) appelle la fonction "operator void *" au lieu de "operator bool" quand on teste directement un objet... (c'est le cas pour cin, ou alors c'est le debugger qui est bogu�)...
    Pourtant, dans dev-c++, ce ne doit pas �tre cela, puisqu'il n'y a pas de "operator void *"...

    Edit 2: le texte en rouge est faux (il serait barr� s'il pouvait l'�tre): J'ai rouvert mon livre sur le C++, c'est toujours "operator void *" qui est utilis�.
    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.

  5. #5
    Inactif  

    Homme Profil pro
    Ing�nieur test de performance
    Inscrit en
    D�cembre 2003
    Messages
    1 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur test de performance
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 1 986
    Par d�faut
    Oui, j'ai oubli�. Ca marche avec visual C++.net 2003.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 54
    Par d�faut
    Citation Envoy� par M�dinoc
    Eh bien, �trangement, on dirait que ton &"3" (qui n'est pas un char *, mais plut�t un char **, � mon avis ce n'est pas ce que tu voulais) est interpr�t� comme un pointeur vers des donn�es constantes (const void *). En C++, on ne peut pas le convertir directement en void * : il te vaut soit un cast de type C, soit un const_cast
    En fait, ce qui ce passe c'est que tu envoie comme param�tre un pointeur sur une constante. Le probl�me c'est que dans le prototype de la fonction CreateThrea, rien n'indique que cette valeur ne sera pas modifi�e. Or comme une constante n'est pas cens�e �tre modifi�e, bah t'as une erreur.
    (rmq: le C est moins restrictif � ce niveau l�, voil� pourquoi �a marche).

    Solution:
    fait un truc du style
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    char*a = "3";
     CreateThread(NULL, 0, th , &a, 0, NULL);

  7. #7
    Membre �clair� Avatar de Ekinoks
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2003
    Messages
    687
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 687
    Par d�faut
    Effectivement c'�t� bien cela !

    Merci pour votre aide =) et dessol� pour ma r�ponse tardive :^/

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Aide sur les Threads
    Par themoye dans le forum MFC
    R�ponses: 24
    Dernier message: 06/03/2005, 15h02
  2. Les Threads... J'en remet une couche :)
    Par Higestromm dans le forum C++
    R�ponses: 5
    Dernier message: 17/11/2004, 12h19
  3. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    R�ponses: 5
    Dernier message: 06/10/2003, 17h25
  4. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    R�ponses: 2
    Dernier message: 15/06/2003, 04h13
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    R�ponses: 5
    Dernier message: 13/06/2003, 13h59

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