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

C# Discussion :

Problème de libération d'objet en cas de non retour d'une dll


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut Problème de libération d'objet en cas de non retour d'une dll
    Bonjour,

    j'ai fait une ptite appli qui utilise des méthodes d'une dll par pinvoke
    cette dll permet de communiquer avec une autre appli 'pseudo-serveur'

    cette dll ne doit pas être très bien faite parce que si l'appli-serveur n'est pas lancée et que j'essaie de dialoguer avec via la dll, je n'ai pas de retour... ça part dans les choux... mais sans aucun message d'erreur ou exception...

    donc, j'ai intégré mes appels à la dll dans des threads
    avant de lancer un de ces threads, je me mets en attente d'un évènement qui doit être levé quand l'appel à la dll se passe bien
    si je ne reçoit pas l'évènement au bout d'un certain temps, je tue le thread...

    le problème, c'est que ça doit coincer quelque part puisque que quand je tombe dans un cas où je n'ai pas de retour de la dll, quand je veux quitter mon appli, je vois que je ne passe pas dans le destructeur... et ça merde... je suis obligée de passer par le gestionnaire de tâches...
    pas terrible...

    comment faire pour bien libérer ces ressources??

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    Alors,
    après quelques investigations,

    on m'a dit qu'il se pourrait qu'un thread ne soit pas libéré dans la dll que j'implémente (elle dialogue avec l'appli-serveur par tcp ip)
    ce qui ferait coincer mon appli...

    Y aurait-il un moyen de contourner ça?
    de détruire mon objet qui fait appel à cette dll?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Par défaut
    Je viens d'apprendre quelque chose aujourd'hui qui pourrait être lié à ton problème. Comment fais tu pour tuer les threads ? Par ma méthode Thread.Abort() ? En effet, Thread.Abort() n'agit pas dans les cas suivants :

    - Si le thread exécute un constructeur static, auquel cas le Abort est exécuté à la fin du constructeur
    - Si le thread exécute un bloc catch/finally, auquel cas le Abort est exécuté à la fin du bloc
    - Si le thread exécute du code non managé, auquel cas le Abort est exécuté à la prochaine instruction de code managé

    Donc forcement, si ton thread exécute un code non managé contenu dans ta dll, et que ce code se bloque pour un raison quelconque, tu ne peux pas en interrompre l'exécution avec la méthode Abort, vu qu'elle va à son tour attendre que le code managé ait fini de s'exécuter...

Discussions similaires

  1. [Toutes versions] Problème lors de la récupération d'un tableau d'udt d'une dll c
    Par mkl238 dans le forum VBA Access
    Réponses: 0
    Dernier message: 23/02/2011, 15h12
  2. Réponses: 13
    Dernier message: 03/04/2006, 11h01
  3. Problèmes de libération de Dll en delphi7 sous windows XP
    Par Tardiff Jean-François dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2006, 16h30
  4. Question simple sur la libération des objets
    Par gibet_b dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2004, 11h01
  5. [MFC] libération des objets GDI's
    Par Kevgeii dans le forum MFC
    Réponses: 5
    Dernier message: 01/02/2004, 11h37

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