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 :

Mon programme multithread ( win32 ) est involontairement infini


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut Mon programme multithread ( win32 ) est involontairement infini
    Bonjour,
    J'ai écrit un programme multithread avec win32 mais son execution ne se termine jamais. Pourriez vous m'aider ?
    Voici le 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
    DWORD WINAPI MaClasse::thread0(LPVOID lpParam)
    {
     
    	LoadingThreadsParameters *parameters = (LoadingThreadsParameters*)lpParam;
     
    	unsigned short beginning = parameters->beginning;
    	unsigned short end = parameters->end;
     
     
    	for (unsigned short i = beginning; i < end ; i++)
    	{
    		//code
    	}
     
     
    	return 1;
    }
     
    DWORD WINAPI MaClasse::thread1(LPVOID lpParam)
    {
     
    	LoadingThreadsParameters *parameters = (LoadingThreadsParameters*)lpParam;
     
    	unsigned short beginning = parameters->beginning;
    	unsigned short end = parameters->end;
     
     
    	for (unsigned short i = beginning; i < end ; i++)
    	{
    		//code
    	}
     
     
    	return 1;
    }
    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
                            LoadingThreadsParameters loadingThreadsParameters0;
    			LoadingThreadsParameters loadingThreadsParameters1;
     
     
    			loadingThreadsParameters0.beginning = 0;
    			loadingThreadsParameters0.end = nbObj/2;
     
    			handleThread[0] = CreateThread(
    				NULL,                   // default security attributes
    				0,                      // use default stack size  
    				&MaClasse::thread0,       // thread function name
    				&threadsParameters0,          // argument to thread function 
    				0,                      // use default creation flags 
    				0);
     
    			threadsParameters1.beginning = nbObj / 2;
    			threadsParameters1.end = (nbObj+1);
     
    			handleThread[1] = CreateThread(
    				NULL,                   // default security attributes
    				0,                      // use default stack size  
    				&MaClasse::thread1,       // thread function name
    				&threadsParameters1,          // argument to thread function 
    				0,                      // use default creation flags 
    				0);
     
                           WaitForMultipleObjects(2, handleLoadingTexturesThread, TRUE, INFINITE);

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    D'où sort handleLoadingTexturesThread et où le signales-tu terminé ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    C'est une erreur de copier/collé.
    Je ne sais pas comment on fait pour signaler un thread terminé avec win32, pourriez vous me l'indiquer ?

  4. #4
    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
    Question principale: Combien d'éléments as-tu?

    Et aussi:
    1. pourquoi nbObj+1 si ta boucle commence à zéro? C'est au start du thread 2 qu'il faut ajouter 1, pas à sa fin.
    2. Pourquoi faire deux procédures de thread différentes si elles ont le même code? Ce n'est pas nécessaire pour faire exécuter le même code par plusieurs threads.


    PS: Le handle d'un thread passe en état "signalé" dès que le thread se termine, de ce côté-là si on ignore l'erreur de copier-coller c'est bon.
    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.

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

Discussions similaires

  1. mon programme est très lent
    Par kawther dans le forum Images
    Réponses: 4
    Dernier message: 08/04/2010, 12h28
  2. Est ce que mon programme est juste ?
    Par autoin dans le forum C
    Réponses: 6
    Dernier message: 25/01/2008, 17h06
  3. Réponses: 5
    Dernier message: 29/12/2007, 00h03
  4. [DEV] Mon programme en C est lent sur Mac G4, pourquoi ? Que faire ?
    Par mator dans le forum Développement OS X
    Réponses: 3
    Dernier message: 10/10/2007, 00h08
  5. Mon programme est considéré comme un trojan -_-'
    Par peijnoob dans le forum Windows
    Réponses: 3
    Dernier message: 21/03/2007, 14h26

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