2010-04-18 5 views
0

J'ai une application serveur avec une telle structure: Il y a un objet, appelez-le serveur, qui en cycle sans fin écoute et accepte les connexions. J'ai une classe descendante de CAsyncSocket, qui a un événement surchargé OnReceive, appelez-le ProxySocket. J'ai aussi un pool de threads avec des threads créés au début.problème CAsyncSocket et ThreadPool

Lorsque la connexion est reçue par un objet serveur, il accepte la nouvelle connexion sur le nouvel objet ProxySocket. Lorsque les données arrivent à ProxySocket, il crée un objet de commande et le donne au pool de threads. Dans cet objet de commande je donne le handle de socket d'un ProxySocket. Quand un nouvel objet de commande est en train de créer, je crée un nouveau Socket dans le thread de travail et je lui attache un handle.
Mon problème est le suivant: Lorsque la commande se termine, le socket ne se ferme pas, je détache juste le manipule et positionne le handle CSocket à la valeur INVALID_SOCKET, comme prévu. Mais mon premier objet ProxySocket ne reçoit pas les messages de nouvelles données reçues après cela. Comment puis-je resoudre ceci?

Répondre

1

Je ne pense pas que vous pouvez utiliser des objets CAsyncSocket (ou leurs descendants) dans un secenario de pool de threads. CAsyncSockets est implémenté au-dessus de WSASsyncSelect - qui indique au Winsock d'envoyer des notifcations à un descripteur de fenêtre. Étant donné que les fenêtres ont une affinité de thread, on ne peut jamais "déplacer" la gestion de CAsyncSocket vers un thread différent.