Bonjour, je développe une application avec MFC (VS8) pour du calcul scientifique 3D (physique des particules). Les calculs sont longs, voir très longs (des dizaines de jours). Aujourd'hui, le schéma de fonctionnement suivant est utilisé pour chaque calcul :

- CBoiteDeDialogueCalculA de CDialog (avec champs d'initialisation, progressbar, ...)
- CCalculA qui effectue le calcul proprement dit (avec une ribanbelle de classes appelées) et interagit avec la progressbar.

- dans CMainFrame, lié à un menu :
- Déclaration de CboiteDeDialogueCalculA
- DoModal() et la boite dialogue prend le relais

=> Le calcul freezera rapidement la boite de dialogue, voire toute l'appli !!!

La solution est d'ajouter du multi-threading ;o)

Ok, je lance désormais les calculs comme des nouveaux thread, cad :
- dans CboiteDeDialogueCalculA, je lance la fonction de calcul :
AfxBeginThread( MaFonctionDeCalcul, CboiteDeDialogueCalculA*)

=> Le calcul se lance, tout commence bien, la progressBar, les textes informatifs de la boite de dialogue et, de facon aléatoire, ca plante sur le DoModal lancé dans le CMainFrame et à des endroits différents dans le code du DoModal ???
Je suis un peu paumé avec les possibilités et la manière de s'y prendre pour le multi-threading, c'est ma première fois... J'ai essayé en ouvrant ma boite de dialogue en Create() pour que le GUI principal reste accessible, mais dans ce cas ce sont les fonctions d'auto-update de l'interface (OnUpdateEditCut, OnUpdateEditPaste,...) qui plantent...

Merci de partager votre expérience sur cet épineux problème !
Jc.