Arreter un select bloquand depuis un autre thread

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 25 sept. 2004 à 23:32
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 12 nov. 2005 à 13:58
salut,
sous windows, j'ai pas de probleme, mais sous linux, quel est le moyen pour qu'un thread qui bloque sur un select bloquant se débloque? shutdown(sock, 2) et close(sock) semblent sans effet...

en fait j'en suis la:

// bind et listen sur le socket viennent d'etre fait.
fd_set set;
FD_ZERO(&set);
FD_SET(sock,&set);
if (select((int) sock + 1,&set,0,0,0) == 1) // ca bloque ici jusqu'a ce qu'un client arrive.
{
// etc.
}

depuis un autre thread, j'essaie de fermer sock, mais ca semble pas débloquer le select...
qqun sait comment faire ?
merci ;)

2 réponses

DarkEbola Messages postés 6 Date d'inscription vendredi 27 juin 2003 Statut Membre Dernière intervention 11 novembre 2005
11 nov. 2005 à 22:51
salutation.

j'ai exactement le meme probleme ...

si tu as trouvé une solution ... n'hesite pas a m'en faire part :)
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
12 nov. 2005 à 13:58
salut,

oui j'ai trouvé,

la réponse c'est que c'est pas possible.

la
'solution' c'est de faire un select avec un timeout de 100ms par
exemple (ou moins, mais bon un timeout < 10ms est pas pertinent
(c-a-d que ton os va pas forcément attendre exactement 10ms, parce que
la 'résolution' de l'attente est pas assez bonne)), et
tu atteins ton timeout total en faisant une boucle.



A chaque
iteration tu regardes si un autre thread (avec une variable partagée,
ou globale) te demande d'arreter, et si oui tu te casses de la boucle,
et tu sors du thread.



voila... la sortie du thread qui fait le
select sera pas instantannée; mais prendra 100ms (ou moins) donc c'est
completement acceptable.



si t'as une autre idée, ou qu'un jour
tu trouves comment faire mieux, dis moi ... si t'as pas pigé tout ce
que j'ai raconté, demande moi aussi



allez a+
0
Rejoignez-nous