Terminer un thread à la barbare mais proprement quand même ??? [MFC] - C++ - Programmation
Marsh Posté le 14-05-2002 à 17:01:40
Citation : |
http://support.microsoft.com/defau [...] US;q254956
Marsh Posté le 14-05-2002 à 17:11:16
Ouais, mais j'avais déja vu tout ça !
Avec ces trucs là, tu peux arrêter ton thread prématurément mais il faut qu'il tourne encore pour choper des messages. Moi, mon thread, s'il est bloqué, il est bloqué (!) et il ne peut plus recevoir de message, ni continuer ! Il est bloqué sur la fonction qui discute avec la carte et on ne peut rien faire (sauf TerminateThread() )...
enfin, si justement, je me renseigne pour savoir s'il n'y a pas un moyen autre que d'appeler cette fonction.
Marsh Posté le 14-05-2002 à 17:19:58
Et un ExitThread(), ce n'est pas envisageable ?
Marsh Posté le 14-05-2002 à 17:44:39
Comment tu t'y prend pour faire dialoguer ton process et la carte d'aquisition ?
Marsh Posté le 14-05-2002 à 18:05:47
D'après ce que je vois dans la mdsn, exitthread doit être appeler par le thread lui même : ce qui n'est pas possible dans mon cas, si le thread est bloqué !
Pour le dialogue avec la carte, je ne sais pas car ce n'est pas moi qui m'occupe de ça : mais dis-moi, si tu as des idées sur ça pour que j'en discute avec le concerné !
Marsh Posté le 15-05-2002 à 09:28:03
Moi je pensais creer un thread de debug avec la fct DebugActiveProcess:
The DebugActiveProcess function allows a debugger to attach to an active process and then debug it. To stop debugging the process, you must exit the process. Exiting the debugger will also exit the process.
BOOL DebugActiveProcess(
DWORD dwProcessId // process to be debugged
);
Ensuite utiliser une boucle infinie qui va detecter tous les evenements en utilisant la fct WaitForDebugEvent:
The WaitForDebugEvent function waits for a debugging event to occur in a process being debugged.
BOOL WaitForDebugEvent(
LPDEBUG_EVENT lpDebugEvent, // debug event information
DWORD dwMilliseconds // time-out value
);
Deja ca te permettrai de voir sur quel evenement ton process se bloque. Normalement, quand tu fais un ExitProcess sur le Process de debug, il doit egalement terminer le process debugge. Par contre je ne sais pas si il le fait proprement!!
Marsh Posté le 14-05-2002 à 16:56:28
Je dois discuter avec une carte d'acquisition dans le PC, mais parfois ça bloque. J'utilise donc un thread qui se charge de faire ça, pour que si ça bloque, l'appli ne soit pas plantée complètement.
Pour l'instant, je comptais utiliser la fcn "TerminateThread()" qui arrête le thread quoiqu'il arrive : le problème, je crois, c'est que cette fonction n'est pas super propre et je risque d'avoir des fuites de mémoires ou des écrasements de dll (dixit la mdsn)...
Alors comment faire pour quitter ma thread bloqué par une commande d'E/S, sans tout bousiller ???
Merci d'avance et bonne fin d'aprèm !
Joel