Je coup d'oeil dans le code de mon ancêtre et a découvert une fuite dans la situation suivante:Un sommeil de fil provoque une fuite de mémoire
1) Application Lancer
b) Une fois l'application lancée, fermez le applicaiton dans les 4 secondes
le message de fuite:
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {58509} client block at 0x016DFA30, subtype c0, 68 bytes long.
par la suite, je suis passé par le code, trouvé sur le point de la cause suspecte à un 4secs de sommeil à contrôler la fonction de thread de travail.
Le programme d'essai:
UINT InitThread(LPVOID pParam)
{
Sleep(4000); //4000 is the default value, it reads from a registry key.
CMyMFCTestProjectDlg* pTest = (CMyMFCTestProjectDlg*)pParam;
pTest->DoSomething();
return 0; //--> Exit thread
}
BOOL CMyMFCTestProjectDlg::OnInitDialog() {
...
AfxBeginThread(InitThread, this);
...
}
Si je réduis/retirer de la minuterie de sommeil, la fuite sera résolu.
Cependant, j'aimerais savoir comment cela se passe. Soit en raison de thread de travail ou de terminaison de thread graphique? Est-ce que le thread de travail se ferme après que le thread de l'interface graphique provoque ce problème? Est-ce que quelqu'un peut remonter le moral de ma journée en m'aidant à expliquer cela? Je suis perdu ....
Ce n'est pas le sommeil. Vous devez poster plus de code. Que fait le fil contenant le sommeil? – Matt
@Matt H: Il y a d'autres codes dans le thread. C'est un "thread dormant" qui peut fournir une option pour retarder l'exécution du code restant. Laissez-moi essayer d'éditer le code ... – wengseng