J'essaie de gérer socket dans différents threads créant une défaillance d'exécution. Voir le code suivant. J'appelle Lock() à partir d'un thread et Unlock() à partir d'autres threads. Quand il exécute CSocket :: Close() il donne une exception.Comment gérer la même socket dans différents threads?
J'ai cherché sur Google pour ce bug et j'ai des raisons. Cela se produit parce que; un objet CSocket ne doit être utilisé que dans le contexte d'un seul thread car le descripteur SOCKET encapsulé par un objet CAsyncSocket est stocké dans un mappage de handle par thread. Ils suggèrent également une solution en partageant les poignées SOCKET entre les threads (http://support.microsoft.com/kb/175668). Mais ce n'est pas possible dans mon cas puisque j'excepte un rappel de notification qui ne fonctionnera pas avec la solution ci-dessus. Quelqu'un peut-il suggérer un mécanisme pour partager CSocket entre les threads sans effectuer de rappels de notification?
BTW, en utilisant ++ et - comme cela dans un environnement multithread ne fonctionnera pas car ces opérations ne sont pas garanties pour être atomique. Vous pouvez utiliser InterlockedIncrement() et InterlockedDecrement() pour obtenir l'atomicité. Pas lié au problème auquel vous faites face, mais gardez à l'esprit. – Naveen
@Naveen - Merci pour le conseil – Vadakkumpadath