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

POSIX C Discussion :

Problème d'interruption momentanée de thread


Sujet :

POSIX C

  1. #1
    Candidat au Club
    Homme Profil pro
    administrateur systèmes
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : administrateur systèmes
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème d'interruption momentanée de thread
    Bonjour,

    Mon programme devrait en faite lancer deux thread, l'un va incrémenter un compteur déclaré comme variable global et attendre 1 seconde pendant que l'autre va afficher toutes les 2 secondes la valeur du compteur. Mon problème est que le programme affiche seulement le résultat à la fin et pas toutes les 2 secondes. En enlevant le sleep de la fonction chargée d'afficher là le résultat est affiché pendant que l'autre thread incrémente. Merci de m'aider à résoudre ceci.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    #include <time.h>
    #include <unistd.h>
    #include <errno.h>
     
    pthread_mutex_t my_mutex = PTHREAD_MUTEX_INITIALIZER;
    int compt;
     
    void *compteur(void *nb)
    {
        int nombre = (int)nb;
     
        while(nombre != compt)
        {
            pthread_mutex_lock(&my_mutex);
            compt += 1;
            pthread_mutex_unlock(&my_mutex);
            sleep(1);
        }
        pthread_exit(0);
    }
     
    void *affichage(void *nb)
    {
        int nombre = (int)nb;
     
        while(nombre != compt)
        {
            pthread_mutex_lock(&my_mutex);
            printf("%d ", compt);
            pthread_mutex_unlock(&my_mutex);
            sleep(2);
        }
     
        pthread_exit(0);
    }
     
     
    int main(int argc, char* argv[])
    {
        int ret1, ret2;
        pthread_t thread1, thread2;
        compt = 0;
        int nombre = 5;
     
    //    sscanf(argv[1], "%d", &nombre);
     
        pthread_mutex_init (&my_mutex, NULL);
     
        ret1 = pthread_create(&thread1, NULL, compteur, (void*)nombre);
     
        if(ret1 !=0)
        {
            fprintf(stderr, "Erreur lors de la creation du thread 1");
            exit(1);
        }
     
        ret2 = pthread_create(&thread2, NULL, affichage, (void*)nombre);
     
        if(ret2 != 0)
        {
            fprintf(stderr, "Erreur lors de la creation du thread 2");
            exit(1);
        }
     
        pthread_join(thread1, NULL);
        pthread_join(thread2, NULL);
     
        return 0;
    }

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Souvent, les sorties standards sont bufferisées et attendent l'arrivée du caractère '\n' pour afficher la ligne en cours. Rajoute donc un '\n' dans ta fonction d'affichage.

  3. #3
    Candidat au Club
    Homme Profil pro
    administrateur systèmes
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : administrateur systèmes
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, c'était ca ! J'ai cherché tellement longtemps pour ca ... J'ai aussi entre temps changé le sleep par une fonction msleep qui a été conseillé dans le tuto thread POSIX de ce site.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Si ca peut te rassurer, tu te referas avoir dans le futur

    Clique sur le bouton en bas de la page si ton problème est réglé.

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

Discussions similaires

  1. problème d'affichage dans un thread
    Par innosang dans le forum POSIX
    Réponses: 8
    Dernier message: 20/12/2006, 20h40
  2. Interruption d'un Thread
    Par doudblast dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 11/03/2006, 17h30
  3. Réponses: 11
    Dernier message: 14/02/2006, 00h26
  4. [C#] - Problème sur fermeture d'un thread
    Par Erakis dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/01/2006, 01h22
  5. [Thread][socket]Problème de fermeture d'un thread
    Par meda dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 04/11/2004, 01h03

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