Bonjour
Je travaille actuellement sur une grosse appli serveur compil�e en gcc/mingw avec les libs boost.

Cette appli peut se terminer sur une saisie utilisateur (mode console, pas de gui) , ou pour d'autres raison (erreur, reception d'un commande, etc).

En essayant d'impl�menter cela, je m'aper�ois que si un thread fait un appel a "exit()" pendant qu'un autre bloque en lecture sur cin, le programme ne se termine pas.

Voici un exemple de code simple qui provoque cette erreur :
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
class Input : public Thread {
public:
    Input() : Thread() {
    }
 
    virtual void threadMain() {
        sleep(1000);
        std::cout << "thread calls exit" << std::endl;
        exit(0);
        std::cout << "exit done";
    }
 
};
 
int main ( int argc, char* argv[] ) {
    Input input;
    input.run();
    std::string i;
    std::cin >> i;
 
    std::cout << "ok, main unlocked with '"<<i << "'" << std::endl;
    return 0;
}
aussi �tonnant que ca puisse paraitre, ca affiche bien "thread calls exit" au bout d'une seconde, mais il faut valider une entr�e clavier pour avoir la terminaison effective du programme, et ca, ca me g�ne beaucoup.

J'ai essay� de d�bloquer cin avec des trucs de type putback, sync, en allant chercher le rdbuf, mais rien n'y fait, toutes ces m�thodes sont bloquantes si un thread est en attente de lecture.

Et il ne parait pas du tout pertinent de passer en lecture non bloquante, ca serait une h�r�sie, donc pas de kbhit ou autre test...

Une demi r�ponse me suffirait : faire marcher le "exit" ou d�bloquer le cin

Merci pour vos id�es!