Me asomo en el código de mi antepasado y descubrió una fuga en la siguiente situación:Un sueño en el hilo produce pérdida de memoria
1) Lanzamiento de aplicaciones
b) Después de que se puso en marcha la aplicación, cierre la applicaiton plazo de 4 segundos
el mensaje de fugas:
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {58509} client block at 0x016DFA30, subtype c0, 68 bytes long.
Posteriormente, pasé por el código, descubrió el punto de causa sospechosa en un 4secs de sueño por la función de control de subproceso de trabajo.
El programa de pruebas:
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 puedo reducir/eliminar el temporizador de apagado, se resolverá la fuga.
Sin embargo, me gustaría saber cómo sucede. ¿O debido al hilo de trabajo o la terminación del hilo de la GUI? ¿Saldrá el hilo del trabajador después de que el hilo de GUI cause este problema?
¿Alguien puede animar mi día ayudándome a explicar esto? Estoy perdido ...
No es sueño. Necesitas publicar más código. ¿Qué hace el hilo que contiene el sueño? – Matt
@Matt H: hay algunos otros códigos dentro del hilo. Este es un "hilo de dormir" que puede proporcionar la opción de retrasar la ejecución del código restante. Déjame intentar editar el código ... – wengseng