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 :

Passage de paramètre à un thread


Sujet :

Threads & Processus C++

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Passage de paramètre à un thread
    Bonjour,

    J'essaie de passer une structure à un thread sous Visual C++ express.

    Voici mon petit bout de code:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <windows.h>
    #include <iostream>
    #include <process.h>
     
    using namespace std;
     
    struct Structure
    {
    	int variable;
    };
    Structure structure;
    HANDLE hThread;
     
    unsigned __stdcall Thread(void *arguments)
    {
    	Structure *pStructure = reinterpret_cast<Structure*>(arguments);
    	cout << "Variable dans thread= " << pStructure->variable << endl;
    	return( 0 );
    }
     
    void main ( int argc, char** argv )
    {
    	unsigned ThreadId;
    	Structure *pStructure = &structure;
    	pStructure->variable=1;
     
    	cout << "Verif variable 1 = " << structure.variable << endl;
    	cout << "Verif variable 2 = " << pStructure->variable << endl;
    	hThread = (HANDLE)_beginthreadex(NULL, 0, Thread, &pStructure, 0, &ThreadId);
    	if (hThread == 0)
    	{
    		cout << "Erreur au lancement du thread : " << strerror(errno) << endl;
    		cout << "Code erreur thread DOS : " << _doserrno << endl;
    	}
    	getchar();
    	CloseHandle(hThread);
    }
    Problème voici ce que j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Verif variable 1 = 1
    Verif variable 2 = 1
    Variable dans thread= 4327524
    Ma variable n'est plus égal à 1 mais à 4327524 dans le thread, d'ou peut venir ce problème ? Un mauvais "castage" ?

    Cordialement.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Citation Envoyé par Lovmy Voir le message
    Un mauvais "castage" ?
    Oui

    Tu déclares :
    Tu appelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hThread = (HANDLE)_beginthreadex(NULL, 0, Thread, &pStructure, 0, &ThreadId);
    Donc le paramètre est un Structure**
    Or dans ton thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Structure *pStructure = reinterpret_cast<Structure*>(arguments);
    Donc le type n'est pas bon.
    Ce devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hThread = (HANDLE)_beginthreadex(NULL, 0, Thread, /*&*/pStructure, 0, &ThreadId);
    // ou
    hThread = (HANDLE)_beginthreadex(NULL, 0, Thread, &structure, 0, &ThreadId);
    Ceci n'est je présume qu'un code d'exemple. Car, il faut aussi veiller à gérer l'accès concurrent aux données partagées (mutex etc.)

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut & bin
    Re,

    Ça marche, j'avais pas fait attention.

    Merci !

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

Discussions similaires

  1. [C] passage de paramètre entre thread
    Par aziatedu13 dans le forum Linux
    Réponses: 4
    Dernier message: 29/01/2008, 16h39
  2. Thread et passage de paramètre
    Par loman02 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 10/08/2007, 14h24
  3. Passage de paramètres dans un thread
    Par innosang dans le forum POSIX
    Réponses: 1
    Dernier message: 04/01/2007, 15h13
  4. Passage de paramètres entre thread
    Par bluecurve dans le forum Langage
    Réponses: 3
    Dernier message: 25/05/2006, 02h06
  5. Réponses: 1
    Dernier message: 19/05/2006, 09h24

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