Dans mon programme, il y a un thread (thread de réception) qui est chargé de recevoir des demandes d'un socket TCP et il y a beaucoup de threads (threads de travail) chargés du traitement demandes Une fois qu'une demande est traitée, je dois envoyer une réponse via TCP.Comment annuler en attente dans select() sous Windows
Et voici une question. Je voudrais envoyer des données TCP dans le même thread que j'utilise pour recevoir des données. Ce fil après avoir reçu des données attend généralement de nouvelles données dans select()
. Ainsi, une fois qu'un thread de travail a fini de traiter une requête et de mettre une réponse dans la file d'attente de sortie, il doit signaler au thread de réception qu'il y a des données à envoyer. Le problème est que je ne sais pas comment annuler l'attente en select()
afin de sortir de l'attente et d'appeler send()
. Ou dois-je utiliser un autre thread uniquement pour envoyer des données via TCP?
Mise à jour
MSalters, Artyom merci pour vous répondre!
MSalters, après avoir lu votre réponse, j'ai trouvé ce site: Winsock 2 I/O Methods et lire environ WSAWaitForMultipleEvents()
. Mon programme doit en fait fonctionner à la fois sur HP-UX et Windows J'ai finalement décidé d'utiliser l'approche qui avait été suggérée par Artyom.
Pourquoi utilisez-vous 'select()' pour écrire? Habituellement, 'select()' attend simplement les données reçues, et vous pouvez 'envoyer()' des données en utilisant les mêmes socket (s) pendant ce temps. – ereOn
Non, je n'utilise pas select pour l'écriture. Est-ce que j'ai dit ca? –
@skwllsp: Je l'ai supposé puisque vous semblez vouloir annuler 'select()' pour écrire sur votre socket, ce qui n'est pas nécessaire. Mais peut-être que j'ai mal compris le tout, mon anglais n'est pas exactement natif. – ereOn