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 :

Problème compilation (?) pThread


Sujet :

C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème compilation (?) pThread
    Bonjour,

    voici mon problème le thread "store" ne semble pas s’exécuter.
    Chez d'autres personnes (linux, win7) le thread s'execute correctement.

    Mon OS : Win7 64bits
    IDE : Code::blocks
    Compilateur : MinGW32
    code source : (tiré de ce tuto)
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #ifdef __WIN32__
    #  include <windows.h>
    #  define psleep(sec) Sleep ((sec) * 1000)
    #else
    #  include <unistd.h>
    #  define psleep(sec) sleep ((sec))
    #endif
     
    #define INITIAL_STOCK   20
    #define NB_CLIENTS      5
     
     
    /* Struct informations of threads clients and magasin. */
    typedef struct
    {
       int stock;
     
       pthread_t thread_store;
       pthread_t thread_clients [NB_CLIENTS];
    }
    store_t;
     
    static store_t store =
    {
       .stock = INITIAL_STOCK,
    };
     
     
    /* Function get a number between 0 and max. */
    static int get_random (int max)
    {
       double val;
     
       val = (double) max * rand ();
       val = val / (RAND_MAX + 1.0);
     
       return ((int) val);
    }
     
     
    /* Function thread magasin. */
    static void * fn_store (void * p_data)
    {
       while (1)
       {
          if (store.stock <= 0)
          {
             store.stock = INITIAL_STOCK;
             printf ("Remplissage du stock de %d articles !\n", store.stock);
             fflush(stdout);
          }
       }
     
       return NULL;
    }
     
     
    /* Function thread clients. */
    static void * fn_clients (void * p_data)
    {
       int nb = (int) p_data;
     
       while (1)
       {
          int val = get_random (6);
     
          psleep (get_random (3));
     
          store.stock = store.stock - val;
          printf (
             "Client %d prend %d du stock, reste %d en stock !\n",
             nb, val, store.stock
          );
          fflush(stdout);
       }
     
       return NULL;
    }
     
     
    int main (void)
    {
       int i = 0;
       int ret = 0;
     
     
       /* Creation threads: magasin */
       printf ("Creation du thread du magasin !\n");
       ret = pthread_create (
          & store.thread_store, NULL,
          fn_store, NULL
       );
     
       /* Creation threads: clients */
       if (! ret)
       {
          printf ("Creation des threads clients !\n");
          for (i = 0; i < NB_CLIENTS; i++)
          {
             ret = pthread_create (
                & store.thread_clients [i], NULL,
                fn_clients, (void *) i
             );
     
             if (ret)
             {
                fprintf (stderr, "%s", strerror (ret));
             }
          }
       }
       else
       {
          fprintf (stderr, "%s", strerror (ret));
       }
     
       /* Wait the end of threads. */
       i = 0;
       for (i = 0; i < NB_CLIENTS; i++)
       {
          pthread_join (store.thread_clients [i], NULL);
       }
       pthread_join (store.thread_store, NULL);
     
     
       return EXIT_SUCCESS;
    }
    J'ai pris la librairie .a et dll 32bits. (dll situé dans windows/system)

    J'ai tenté :
    - la compilation directement sur code::blocks (build options - linker settings -lpthread // Search directories pthread/include)
    - une compilation à partir de l'invite de commande (gcc main.c -o test.exe -lpthread)

    Seul le thread client s’exécute :

    Nom : 1419310877-log.jpg
Affichages : 107
Taille : 311,9 Ko

    J'ai testé l'exe d'un ami, les 2 threads tournent impeccable. (donc le problème ne semble pas se situer au niveau du code :p)

    Si quelqu'un a une idée... je suis preneur ! 2jours que je galère dessus lol
    Dernière modification par Invité ; 27/12/2014 à 23h08. Motif: Lien pastebin => balises CODE

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

Discussions similaires

  1. [VB5] Problème compilation, ocx manquants
    Par rastali dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/10/2005, 14h39
  2. [Kylix] Problème de compilation
    Par rabbi_jaccob dans le forum EDI
    Réponses: 3
    Dernier message: 25/07/2005, 23h36
  3. Problème compilation (toolkit Maximum Entropy)
    Par yannick_frere dans le forum MFC
    Réponses: 4
    Dernier message: 07/03/2005, 09h47
  4. Problème compilation Version 8.0.1 sous Debian Sarge
    Par LIndien dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/02/2005, 21h38
  5. [Kylix] problème compilation kylix3 avec redhat 9.0
    Par madininaoursa dans le forum EDI
    Réponses: 1
    Dernier message: 02/07/2003, 16h21

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