El corto de él es: Para un proceso nativo Win32 para terminar, una de las dos condiciones deben cumplirse:
- Alguien llama ExitProcess o TerminateProcess.
- Todos los subprocesos salen (volviendo de su ThreadProc (incluido el WinMainEntryPoint que es el primer subproceso creado por windows)), close (al llamar a ExitThread) o terminados (alguien llama TerminateThread).
(La primera condición es realmente la misma que la 2da: ExitProcess y TerminateProcess, como parte de su limpieza, ambos llaman TerminateThread en cada subproceso en el proceso).
El c-tiempo de ejecución impone diferentes condiciones: Para una aplicación C/C++ para terminar, usted debe:
- regreso de principal (o WinMain).
- salida llamada()
Calling salida() o regresar de main() tanto hacer que el c-tiempo de ejecución para llamar ExitProcess().Que es cómo c & las aplicaciones C++ salen sin limpiar sus hilos. Yo, personalmente, creo que esto es algo malo.
Sin embargo, los procesos no triviales de Win32 nunca pueden terminar porque muchos subsistemas Win32 perfectos, por lo demás razonables, crean subprocesos de trabajo. winsock, ole, etc. Y no proporcionan ninguna forma de hacer que esos hilos se cierren espontáneamente.
La explicación dada aquí es 100% correcta. Lo validé, el subproceso WinMain fue creado por C Runtime y cuando el subproceso salió del C Runtime llamado ExitProcess, lo que provocó que la aplicación completa terminara (incluidos otros subprocesos). –