Terminaison d'un thread dans une DLL

Signaler
Messages postés
130
Date d'inscription
mercredi 2 janvier 2002
Statut
Membre
Dernière intervention
7 juillet 2012
-
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009
-
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

Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

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.
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Peux-tu détaillé ?
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

Problème résolu,

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

Bye ;)