Terminaison d'un thread dans une DLL

cs_Tibabou Messages postés 129 Date d'inscription mercredi 2 janvier 2002 Statut Membre Dernière intervention 7 juillet 2012 - 21 nov. 2008 à 20:04
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009 - 6 oct. 2009 à 18:58
Bonsoir,

OS : WinXP SP2
Compilateur : VS2008

J'ai créer une DLL dans laquelle une fonction crée un thread :

    void  __stdcall tibabou_launch(maClasse *objet)
    {
        DWORD threadID;
        CreateThread(NULL, 0, ThreadTibabou, objet, 0, &threadID);
    }

    DWORD WINAPI ThreadTibabou(LPVOID lpParameter)
    {
        ((maClasse*)lpParameter)->launch();

        return 0;
    }

La méthode launch() de mon objet fait tout un tas de traitements dans une boucle : while (this->loopAgain) {...}
J'ai une autre méthode qui permet de stopper cette boucle (passage du booléen à false : crado mais fonctionnel).

J'appelle cette DLL depuis VB.

Le problème est le suivant :
La boucle accepte des connexions client (socket). Tant qu'aucun client ne se connecte, launch() et stop() fonctionnent parfaitement. Si un client se connecte puis se déconnecte... toujours pas de souci... je fais un appel à stop() et là ça crash sur la dernière accolade de ma méthode launch().

VB6 affiche le message d'erreur : L'exception Exception logicielle inconnue (0x....) s'est produite dans l'application à l'emplacement 0x....

Quant au débuggueur de VS2008, il m'informe de la pile des appels :

DLL2008.dll!__crt_debugger_hook()     Unknown
DLL2008.dll!__report_gsfailure()  Ligne 315 + 0x7 octets     C
DLL2008.dll!maClasse::launch()  Ligne 602 + 0x11 octets    C++  <--dernière accolade de la définition de la méthode
DLL2008.dll!ThreadServer(void * lpParameter=0x02fa29c8)  Ligne 15    C++

NB : lorsque j'utilise ma classe directement en C++ (SANS passer par ma DLL), ce scénario ne donne pas lieu à un incident.

Merci d'avance pour votre aide précieuse.

Tibabou

3 réponses

cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009
5 oct. 2009 à 20:59
Salut,

Exactement le même problème à la différence prés que mon programme est en c++ (et non VB).

A tu trouvé une solution a ton problème ?

Merci d'avance.
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
6 oct. 2009 à 08:24
Peux-tu détaillé ?
0
cs_Booster Messages postés 235 Date d'inscription mercredi 30 octobre 2002 Statut Membre Dernière intervention 6 octobre 2009
6 oct. 2009 à 18:58
Problème résolu,

J'avais oublier de definir ma function de callback avec __stdcall

Bye ;)
0
Rejoignez-nous