Bonjour,
ça fait un moment que je bute sur ce probleme sans résultat :

pourquoi la sortie standard ne marche plus lorsqu'un pthread se termine ?

J'ai simplifié le programme au maximum (un Client/Serveur à la base) pour trouver le probleme et ... la solution...
ce bout de code compile en C++ avec g++ (sans doute en c aussi avec gcc), sous Linux ou sous windows avec cygwin (c'est mon cas) avec la commande
g++ -o tt test_thread.cpp -lpthread


le 'main' créer un thread qui va durer 5 secondes, et pendant ce temps, il compte 10 secondes

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
#include <stdio.h>
#include <pthread.h>
#include <iostream>
using namespace std;
 
void* tache(void * arg)
{
        printf("threaddémarrer attente de 5 sec...\n");
        sleep(5);
}
 
int main(int argc, char argv[])
{
        pthread_t thread_id;
 
        pthread_attr_t attribut;
        pthread_attr_init(&attribut);
        pthread_attr_setdetachstate(&attribut,PTHREAD_CREATE_DETACHED); 
 
        if (pthread_create(&thread_id, &attribut,tache, NULL) == -1)
                printf("Unable to create the thread\n");
 
 
        for(int j = 0; j < 10; j++)
        {
                printf("  'main' toujours en travail, j = %d\n", j);
                sleep(1);
        }    
}
le probleme c'est que la sortie donne :

C:\cygwin\home\Administrateur>tt.exe
'main' toujours en travail, j = 0
threaddémarrer attente de 5 sec...
'main' toujours en travail, j = 1
'main' toujours en travail, j = 2
'main' toujours en travail, j = 3
'main' toujours en travail, j = 4

C:\cygwin\home\Administrateur>
les 5 dernieres secondes sont comptées mais pas affichées !!!

Merci beaucoup d"avance !