Je suis la conception d'un cadre de mise en réseau qui utilise WSAEventSelect
pour les opérations asynchrones. Je génère un thread pour chaque socket 64e en raison de la limite de 64 événements par thread, et tout fonctionne comme prévu, sauf pour une chose:Winsock engendre de façon incontrôlable plusieurs, fils persistants
Les threads continuent à être générés de manière incontrôlable par Winsock lors de la connexion et la déconnexion, threads qui ne vont pas un moyen.
Avec la conception actuelle de la structure, deux threads doivent être en cours d'exécution lorsque seulement quelques sockets sont actifs. Et comme prévu, deux threads fonctionnent au total. Cependant, quand je me connecte avec quelques sockets (1 à 5 sockets), 3 threads supplémentaires sont spawn qui persistent jusqu'à ce que je ferme l'application. En outre, lorsque je perds la connexion sur l'une des sockets, 2 threads supplémentaires sont générés (persistant également jusqu'à la fermeture). C'est 7 threads au total, dont 5 je n'ai aucune idée de ce qu'ils sont là pour.
Si elles sont requises par Winsock pour la connexion ou autre, puis disparaît, ce serait bien. Mais cela me dérange qu'ils persistent jusqu'à ce que je ferme ma demande.
Y a-t-il quelqu'un qui pourrait nous éclairer à ce sujet? Peut-être une solution pour éviter ces threads ou les forcer à se fermer quand aucune connexion n'est active?
(application est écrit en C++ avec Win32 et Winsock 2,2)
Informations Process Explorer:
sujets attendus:
MyApp.exe WinMainCRTStartup
MyApp. exe! Netfw :: NetworkThread :: ThreadProc
fils inattendus:
ntdll.dll RtlpUnWaitCriticalSection + 0x2dc
mswsock.dll + 0x7426
ntdll.dll RtlGetCurrentPeb + 0x155
ntdll.dll RtlGetCurrentPeb + 0x155
ntdll.dll RtlGetCurrentPeb + 0x155
Tous les fils inattendus ont des piles d'appels avec des appels à des fonctions telles que ntkrnlpa.exe!IoSetCompletionRoutineEx+0x46e
ce qui signifie sans doute qu'il est une partie du mécanisme de notification.
Les threads s'additionnent-ils ou font-ils partie d'un pool de threads internes à winsock, qui conserve ces threads dans un pool? – Lucero
@Lucero - Je vais faire quelques tests afin de déterminer. Merci. – haste