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 :

Programmation parallèle en C


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Par défaut Programmation parallèle en C
    Salut tout le monde.

    Je souhaite réaliser une application de gestion d'envoi des SMS. L’utilisateur a le droit d’envoyer seulement trois SMS par minute, ma solution était la suivante :

    Créer deux structures. La structure message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct message{
            double destinataire;
            double emetteur;
            char objet[10];
            char texte[4];
    	char date[10];
    	int consulter; //oui 0,1 sinon
            }message;
    Pour chaque utilisateur, on a les champs suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    typedef struct utilisateur{
            char pseudo[10];
            double numeroDeTelephone;
            char motDepasse[20];
            int typeCompte; //1 Silver,0 pour golden
            message envoyes[10];
            message recus[10]; 
            int nombreDeMessageEnvoyes;
            int nombreDeMessageRecus;
            int nombreDeMessageNonLus;
            int nombreDeMessageResteGratuit;
            time_t dernierDatedeconnexion;        
            }utilisateur;
    Puis, à chaque fois que l’utilisateur souhaite envoyer un SMS, le programme :
    1. initialise une variable globale à 3 ;
    2. passe à la procédure d envoie du SMS ;
    3. lance la procédure d'actualisation de la variable globale qui représente le nombre des SMS qui restent (qui va être appelée une seul fois .


    Mon problème est le suivant : comment intégrer cette procédure d'actualisation dans mon programme ?

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    tu peux nous montrer la structure de ton code ?
    -3- passer à la procédure d envoie du SMS
    Ca veut dire quoi dans le code ?
    Tu crées un thread ou tu passes les paramètres à une fonction ?

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dev-linus Voir le message
    puis à chaque fois que l’utilisateur souhaite envoyer un SMS,le programme:
    -1-initialiser une variable globale à 3
    -3- passer à la procédure d envoie du SMS.
    -4-lancer la procedure d'actualisation de la variable globale qui représente le nombre des SMS qui restes(qui va étre appelé une seul foi .

    Mon probléme est le suivant:comment intégrer cette procedure d actualisation dans mon programme ?
    Non, ton problème est le suivant :

    "comment avoir une pensée claire"

    Si tu utilises une varaible gloable à 3, c'est bien le nombre max de SMS, non ?

    Si oui, vu que tu la passes à la procdure d'envoi, celle ci reçoit 3.

    Que représente "actualiser" pour toi ?

    Le problème est (à mon avis) :

    • Tu as un programme pour lequel tu ne veux autoriser l'envoi que de 3 SMS
    • Tu as une variable (qui ne devrait pas être globale) que tu intialises
    • Tu veux appeler une fonction, qui décrémente la valeur de cette variable, et qui retourne sans s'exécuter - et éventuellement avec un code d'erreur - lorsque la valeur vaut 0


    Si c'est ça, c'est très simple : il suffit que tu passes un pointeur sur la varaible à ta fonction..

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Par défaut
    Merci pour vos remarques, en fait je souhaite procéder de la manière suivant (je vais pas cité la totalité de mon code car c’est trop long) :
    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
     
     #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
     
     
    //déclaration des structures
    //
    //…
     
    int nombreSMSgratuit=3 ;
     
    //procédure d’actualisa
    void *actualisation (void*){
    Do{
    nombreSMSgratuit=3 ;
    sleep(60); // 1 minute
    }while(1) ;
    }
    int nouveauMessage(){
         int j=0;
         double dest;
         printf("A:");
         scanf("%lf",&dest);
     
       if(nombreSMSgratuit==0){       
    /*cette variable va être initialisé au moment de l'authentification de l'utilisateur et va être actualisé chaque 1 min à la val. 3 */
    Int rep=0 ;
     printf("il ne reste plus de SMS gratuit (3SMS par minute), entrez 1 pour procéder au mode de payement,ou 0 pour quitter l’assistance d'envoi des SMS ") ;
    scanf() ;
    if(rep) /*appelle de la fonction de payement else return 0 //pour quitter cette fonction(échec d’envoie)*/
                                                                }
     
     
         }
     
         //procédure d'envoie
         nombreSMSgratuit--;
    return 1 ;
         }
     
     
    //
    //autres fonctions
    //…
     
     
     
    Int main(){
     
    int c;
         printf("***********MENU2***********\n");
         printf("1-Nouveau message\n");
         printf("2-Boite de reception\n");
         printf("3-message envoyes\n");
         printf("4-desactiver mon compte");
         printf("5-se deconnecter");
         printf("donnez votre choix: ");
         scanf("%s",&c);
         int i=1;
         do{
         switch(c){
                   case 1: nouveauMessage();
                   if(i) actualisation();  //pour appeler cette fonction une seul foi
                   i=0;
                   break;
     
                   case 2: // afficher la boite de reception ;
     
                   case 3: //affichage des SMS envoyés
                   case 4: //desactiver le compte d’utilisateur
                   printf("entrer un autre choix:");
                   scanf("%d",&c);
                   }while(c != 5);
         }
     
    }

    voilà,et j'ai deux problémes:
    -mon compilateur affiche une erreur pour sleep() (je travaille avec devC++ sous windows xp).
    -probléme dans l'appele de la fonction d'actualisation(too few arguments to function void* actualisation(void*) ).
    Merci pour votre aide .

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    Tu codes avec une "syntaxe" Linux sous Windows.
    sleep(i) : sous Linux avec i en secondes
    Sleep(i) : Sous Windows avec i en millisecondes

    Ce prototype void *actualisation (void*) est généralement un "thread".

    Donc, tu mélanges un peu tout.

    PS : pourquoi tant de gens utilisent Dev-C++ qui n'est plus maintenu depuis 2005 !!!! Aujourd'hui, en général, c'est Code::Blocks ou Eclipse CDT

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Par défaut
    Citation Envoyé par mala92 Voir le message
    Ce prototype void *actualisation (void*) est généralement un "thread".
    Donc, tu mélanges un peu tout.
    une solution ?

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    Si tu ne fais pas de multi thread c'est simple !!! tu vires les pointeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void actualisation (void)

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Par défaut
    non,j'aurais besoin de ce thread,en fait,je cherche à exécuter cette fonction(actualisation) d'une manière parallèle avec mon programme principale.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Pourquoi se casser la tête et ne pas tester avant d'appeler la fonction ???

    C'est plus logique et plus ergonomique..

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( nbmessagegratuits == 0 )
      afficher_waning();
    sinon
      envoi_message();

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 28
    Par défaut
    ok,mais mon problème réside plutôt dans l'appelle de la fonction actualisation :/

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    c'est normal, quand on fait n'importe quoi n'importe comment on obtient n'importe quoi


    • Pourquoi appeler actualisation quelque chose qui fait une initialisation ?

    • Ensuite tu déclares actualisatio void*. Pourquoi pas void tout simplement ?? ou directement retourner le nombre restant ?

    • Ensuite pouquoi faire un sleep dans actualisation ?

    • Ensuite poiurquoi passer par une variable globale ?

    • Ton while dans ton main sera infini, car tu ne relis pas le c à chaque tour, mais une fois pour toutes au début..

    • Sans compter tout le reste...


    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
     
    int actualisation (int NbSms)
    {
      if ( NbSms > 0 )
           return NbSms-1 ;
      else
           return 0 ;
    }
     
    int affiche_avertissement(void)
    {
    int rep=0 ;
     
        printf("il ne reste plus de SMS gratuit (3SMS par minute), entrez 1 pour procéder au mode de payement,ou 0 pour quitter l’assistance d'envoi des SMS ") ;
        scanf() ;
        return rep ;
    }
    et dans ton man (d'ailleurs c'est int avec un i minucule, on n'est pas en Java) ( et main prend des paramètres ) :

    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
    int main(void)
    {
     int nombreSMSgratuit=3;
     
    ...
         switch(c)
             {
                   case 1: 
                       if ( nombreMgratuit != 0 ) 
                          {
                              nouveauMessage();
                              actualisation(&nombreSMSgratuit);
                          }
                        else
                        if ( affiche_avertissement() == 1 )
                          {
                              /*appelle de la fonction de payement */
                          }
                        break ; 
     
                   case 2: // afficher la boite de reception ; 
                   case 3: //affichage des SMS envoyés
                   case 4: //desactiver le compte d’utilisateur
             }
    }

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/12/2008, 07h48
  2. Réponses: 3
    Dernier message: 13/04/2008, 21h58
  3. programmation parallèle avec MPI
    Par salseropom dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 03/08/2006, 09h45
  4. Programmation parallèle - Linux
    Par pilou254 dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 25/06/2006, 05h55
  5. [MFC] Programmation parallèle sous VC++
    Par Axiome dans le forum MFC
    Réponses: 4
    Dernier message: 14/12/2005, 00h10

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