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 :
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.
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; }
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!
Partager