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 :

correction d'un code


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 84
    Par défaut correction d'un code
    Bonjour,

    Qui peut m'aider a corriger ce code, je sais ça manque beaucoup de choses. En 2 mots ce main remplit une matrice avec les indices de ces cases puis a chaque ptu affiche toutes la colonne grace a un thread puis passe a la colonne suivante ainsi de suite en boucle.
    En fait comment passer 2 arguments a mon thread parceque a mon avis il lui manque de savoir l'origine du tableau ST et je doute que j'ai bien lui passé l'arg s.
    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
    #include <pthread.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/time.h>
    #define nbre_cycle 5
    #define nbre_trame 3
    #define PTU 2
     
    void *func_th (void *arg)
    {
      int sig= (int)arg;
      int j=0;
      fprintf(stderr,"sync frame number: %d ",sig);
      for ( j=0;j<nbre_trame;j++)
    	    {
    	      fprintf(stderr,"la trame %hh est envoyée",ST[sig][j]);	   
    	    }
     
    }
     
    int main(void)
    {
      int i,j, s=0;
      pthread_t th;
      char *ST[nbre_cycle][nbre_trame];
     
      for ( i=0;i<nbre_cycle;i++)
        {
          for (j=0;j<nbre_trame;j++)
    	{
    	  ST[i][j]=(char*)malloc(3 * sizeof(char));
    	  sprintf(ST[i][j],"%d.%d",i,j);
    	}
        }
      while(1)
        {
          if(( pthread_create(&th,NULL,func_th,(void*)s)!)=0 )
    	{
    	  fprintf(stderr,"can't create thread");
    	  exit(EXIT_FAILURE);
    	}
          s++;
          if (s==1024)
    	s=0;
          sleep(PTU);
        }
    }

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Logiquement, pour passer la valeur de s, on devrait avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void *func_th (void *arg)
    {
      int sig= *(int*)arg;
    ...
    associé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void)
    {
      int i,j, s=0;
    ... 
      if(( pthread_create(&th,NULL,func_th,&s)!)=0 )
    Si on veut passer plusieurs choses, on peut les grouper dans une structure et passer l'adresse de celle-ci, ce qui donnerait comme trame :
    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
    struct x
    {
       int s ;
       char *(*tab)[nbre_trame];
    };
     
    void *func_th (void *arg)
    {
      struct x * sig= (struct x *)arg;
      fprintf(stderr,"sync frame number: %d ",sig->s);
    ...
      fprintf(stderr,"la trame %hh est envoyée",sig->tab[sig->s][j]);
    ...
     
    int main(void)
    {
      int i,j;
      pthread_t th;
      char *ST[nbre_cycle][nbre_trame];
      struct x arg;
      arg.s = 0;
      arg.tab = ST;
    ...
      if(( pthread_create(&th,NULL,func_th,(&arg)!)=0 )
    ...
      arg.s++;
    ...

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 84
    Par défaut
    ça compile maintenant suaf que ça fonctionne pas comme je veux.
    Pour la condition if (s==1024) ça manque un pointeur pour faire la comparaison je ne sais pas comment le faire et puis si je ne mets pas ces deux lignes en commentaires ça fait l'erreur suivante "erreur: expected ‘;’ before ‘}’ token"

    et puis si je passe sans ce test ça fonctionne mais ça donne a la 5eme iteration

    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
    #include <pthread.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/time.h>
    #define nbre_cycle 5
    #define nbre_trame 3
    #define PTU 2
    ////////////////////////////////////////////////////////////////////
    typedef struct x
    {
       int s ;
      char *(*tab)[nbre_trame];
    }x;
    ////////////////////////////////////////////////////////////////////
    void *func_th (void *arg)
    {
      int j;
      struct x * sig= (struct x *)arg;
      fprintf(stderr,"sync frame number: %d\n ",sig->s);
    	  for (j=0;j<nbre_trame;j++)
    	    {
    	      fprintf(stderr,"la trame %s est envoyée\n",sig->tab[sig->s][j]);	   
    	    }
     
    }
    ///////////////////////////////////////////////////////////////////
    int main(void)
    {
      int i,j;
      int s=0;
      pthread_t th;
      char *ST[nbre_cycle][nbre_trame];
      struct x arg;
      arg.s = 0;
      arg.tab = ST;
      for ( i=0;i<nbre_cycle;i++)
        {
          for ( j=0;j<nbre_trame;j++)
    	{
    	  ST[i][j]=(char*)malloc(3 * sizeof(char));
    	  sprintf(ST[i][j],"%d.%d",i,j);
    	}
        }
      while(1)
        {
          if(pthread_create(&th,NULL,func_th,&arg)!=0)
    	{
    	  fprintf(stderr,"can't create thread");
    	  exit(EXIT_FAILURE);
    	}
          arg.s++;
          // if (s==1024)
          //	{arg.s=0};
          sleep(PTU);
        }
    }

  4. #4
    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
    Tu as mal placé ton ';'.
    Aussi, cherches-tu à tester s ou arg.s? Car en l'état actuel du code, s ne changera jamais vu qu'aucun code dans le main ne le modifie et qu'aucun thread n'a son adresse...
    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
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 84
    Par défaut
    Si je l'ai oublié c'était avant de déclarer une structure mais comment arriver à comparer arg.s avec 1024 ? Comme ça arg.s==1024 ?

  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
    oui.
    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. Besoin de correction dans un code
    Par juliendu67 dans le forum jQuery
    Réponses: 8
    Dernier message: 01/12/2009, 13h06
  2. Réponses: 6
    Dernier message: 13/06/2009, 21h48
  3. correction d un code en vb.net
    Par vbnetnet dans le forum VB.NET
    Réponses: 4
    Dernier message: 28/04/2009, 13h28
  4. Correction de mon code [Débutant]
    Par Calvein dans le forum C#
    Réponses: 12
    Dernier message: 13/06/2008, 07h28
  5. Correction de mon code vba svp
    Par njinkeu.mbakob dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/04/2008, 12h21

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