cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 2009
-
25 sept. 2004 à 23:32
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 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 ;)
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 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