2010-05-13 5 views
0

J'ai une application qui effectue une communication socket avec certains matériels. Supposons pour le matériel particulier que j'ai un objet et que cet objet initie un thread qui écoute sur un numéro de port particulier disons 5001 infiniment jusqu'à ce qu'une connexion soit établie.Tuer un fil pendant la suppression d'un objet

Maintenant, si je supprime cet obect est là par quoi je peux assurer que le thread qui écoute sur le numéro de port 5001 est également détruit.

Le problème est donc que chaque fois qu'un nouvel objet pour le même périphérique est créé, l'ancien thread n'est pas détruit et il y a donc des fuites de threads.

+0

Il est spécifique à la plate-forme, quel système d'exploitation utilisez-vous? –

+0

Windows et Winsock – ckv

Répondre

1

Dans Windows, vous pouvez utiliser la fonction WaitForSingleObject pour vérifier si le thread s'est terminé (vous pouvez passer le handle du thread à en tant qu'argument). Et vous voulez probablement créer un événement qui déclenchera la sortie du thread.

+0

Vous pouvez utiliser un handle de thread pour supprimer ou supprimer un thread. – ckv

+0

Aussi puisque le fil sera à l'écoute infinie sur le numéro de port particulier en utilisant la fonction accepter socket, il n'y a aucun moyen que je puisse quitter le thread en toute sécurité. – ckv

+0

Vous pouvez utiliser la fonction 'TerminateThread' pour tuer un thread, mais ce sont des mesures extrêmes. –

1

Dans ce cas, vous devez utiliser une socket non bloquante. En cas de blocage des sockets, Acceptez() les blocs d'appel jusqu'à ce qu'il y ait une connexion. Vous pouvez utiliser ioctlsocket pour rendre un socket non bloquant et rechercher le code d'erreur WSAEWOULDBLOCK dans l'appel Accept(). Et bien sûr, modifiez votre boucle infinie pour utiliser WaitForSingleObject.

Plus d'info here

0

C'est probablement une valeur définissant une variable à dire que la boucle de fil doit sortir et envoyer des données à la prise. Cela entraînera la réception de données par le socket, le réveil, la découverte de son heure de sortie et de sortie.

Questions connexes