IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[C] Thread sous windows


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [C] Thread sous windows
    Bonjour,

    J'ai une application qui fait appel à une fonction qui dans certaines conditions me bloque tout. Pour éviter cela j'ai créé un thread qui appelle cette fameuse fonction. Donc mon appli n'est plus bloquée mais parfois la fonction en question buge et mon thread ne se termine jamais. Je n'ai pas le code la fonction qui pose problème et je suis obligé de m'en servir.

    Ma question est donc de savoir comment tuer ce thread de l'extérieur. J'ai bien lu le support de Microsoft et le reste mais tous parlent de mécanisme de synchro. Or je ne peux pas m'en servir car mon thread se bloque à l'appel de cette fonction.

    Si quelqu’un pouvait me donner des infos sur la manière de fermer un thread à partir d'un autre, ca m'aiderait vraiment.

    Merci à vous tous et bonne soirée.

  2. #2
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Il est possible d'utiliser TerminateThread mais cette méthode est très vivement déconseillée (voir la doc MSDN), en particulier :
    - Si le thread détient une section critique, cette dernière n'est pas relachée donc on reste pendu
    - Si le thread est en train d'allouer dans le tas (malloc ou new) le verrou de tas n'est pas relaché (le prochain malloc va bloquer l'application)
    - Si certains appels à Kernel32 sont en cours lors du TerminateThread, l'état noyeau du process peut devenir inconsistant.
    - Si le thread manipule l'état global d'une DLL, ce dernier peut être détruit, entrainant des conséquences pour les autres utilisateurs de la DLL.

    De plus depuis Windows 2000 (également sous XP et 2K3) il y a une fuite mémoire quand on utilise cette fonction.

    En clair : cette fonction ne peut être utilisée que quand on maîtrise le code du thread (" You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination").

    Donc uniquement quand elle n'est pas utile (si je contrôle le code je peux y introduire une synchro et donc éviter cette fonction).
    www.iristechnologies.eu
    Centre de formation à Paris et Toulouse

Discussions similaires

  1. création d'un threads sous windows
    Par levaron dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 09/06/2009, 11h35
  2. [Parallèle] Création d'un thread, sous windows.
    Par z980x dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 11/11/2008, 12h44
  3. [Freezes] Python+Threads sous Windows
    Par gslongo dans le forum GTK+ avec Python
    Réponses: 6
    Dernier message: 24/06/2008, 21h12
  4. thread sous windows
    Par hedi07 dans le forum Windows
    Réponses: 12
    Dernier message: 25/04/2007, 19h21
  5. Threads sous Windows
    Par Geoff-sk8 dans le forum Windows
    Réponses: 2
    Dernier message: 23/10/2006, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo