Bonjour,
je fais appel à une fonction "Common()" définie dans une DLL pour effectuer un traitement qui peut etre trés long dans une partie de mon programme. J'aimerais que ce traitement s'arrete si son temps d'execution dépasse les 30s, meme s'il n'est pas terminé. Je mise sur les threads pour gérer cette problématique, mais ca ne fonctionne pas correctement...
J'ai écrit une classe héritant de CWinThread : CCommonThread
Dans la propriété "Run()" de cette classe, j'ai placé la fonction "Common()" de ma DLL.
Dans mon programme, je lance ainsi le nouveau thread :
Cela fonctionne au premier passage, mais ensuite, dés que je veux utiliser des fonctionnalités de la DLL, mon appli plante. J'ai l'impression que la DLL n'est pas proprement libérée à la fermeture du thread...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CCommonThread* pAdapter = (CCommonThread*)AfxBeginThread( RUNTIME_CLASS(CCommonThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); pAdapter->m_bAutoDelete = FALSE; pAdapter->ResumeThread(); DWORD exitCode; if ( ::WaitForSingleObject( pAdapter->m_hThread, 30000) == WAIT_TIMEOUT ) { exitCode = 1; } else { exitCode = 0; } pAdapter->PostThreadMessage( WM_QUIT, 0, 0);
Auriez-vous une idée pour résoudre ce genre de problème. Y a-t-il une issue sans utiliser les threads ?
Tous les exemples de mise en place d'une solution threadée (trouvés sur le web) montre une boucle de traitement dans l'execution du thread. La terminaison du thread s'effectue de lui-meme en mettant une fin à cette boucle. Je ne suis pas dans cette situation, car dés que le thread appelle la fonction "Common()" de la DLL, je n'ai plus la main...
Merci pour votre coup de main !!!
Partager