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

Dotnet Discussion :

Comment stopper un thread qui fait des appels natifs ?


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut Comment stopper un thread qui fait des appels natifs ?
    Salut,

    J'ai un cas un peu particulier à vous soumettre :

    Considérons un code C++ contenant une méthode C++ très longue à exécuter (potentiellement plusieurs heures).
    Ce code C++ est encapsulé dans une DLL pour être appelé depuis du code c# via un wrapper.
    Côté C#, dans un thread, j'appelle cette fonction C++ très longue via son wrapper.

    Comment faire pour forcer l'arrêt du thread c# sachant que bien sûr, le code C++ sous-jacent n'aura pas terminé de s'exécuter ?
    J'ai essayé un thread.Abort() mais le code C++ continue à tourner. J'ai lu que le Thread.Abort() du CLR n'était capable d'arrêter que les instructions qu'il gèrait, ce qui expliquerait pourquoi le traitement C++ ne s'arrête pas, quelle serait alors la bonne manière de procéder ?

    Quelqu'un a-t-il une idée ?

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Par défaut
    Fais un kill !

    Sinon plus sérieusement tu sais diviser cette longue fonction ? comme ça tu sais arrêter le thread après x minutes au lieu de x heures ...

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Non, je n'ai pas la main sur le code C++, je ne peux pas le modifier.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Une possibilité setait peut êter de créer un AppDomain secondaire qui se chargera de l'appel de la fonction C++ et pourra être déchargé à la demande.


    Un truc comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			string myAssemblyName = "assembly_appelant_fonction_cpluplus";
    			AppDomain domaine = AppDomain.CreateDomain("MySecondaryDomain");
    			domaine.Load(myAssemblyName);
    Puis, pur arrêter le tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			AppDomain.Unload(domaine);

    A tester dans ce cas de figure, car je ne suis pas sur que cela fonctionne.

  5. #5
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    J'ai essayé cette idée, mais ça ne donne rien de plus. L'appdomain est bien déchargé, mais le traitement continue à courir

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par khayyam90 Voir le message
    J'ai essayé cette idée, mais ça ne donne rien de plus. L'appdomain est bien déchargé, mais le traitement continue à courir

    Tu es sur que tu inities bien le traitement dans le domaine secondaire ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/05/2010, 13h54
  2. comment fermer un site qui contient des framesets
    Par zana74 dans le forum Langage
    Réponses: 6
    Dernier message: 20/08/2006, 16h45
  3. Pop up qui fait des siennes !
    Par Sandara dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 13/06/2006, 16h40
  4. Réponses: 6
    Dernier message: 11/05/2006, 16h00
  5. [Thread] comment arreter un thread qui execute une methode b
    Par Cyber@l dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 04/08/2004, 10h51

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