PRB: Error en Win32s: R6016 - no hay espacio suficiente para datos de subproceso

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 126709
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.
Síntomas
Desove y cerrar una aplicación varias veces tiene éxito alrededor de 60 veces, entonces se produce un error en la generación con este error:
R6016 - no hay espacio suficiente para datos de subproceso
Causa
No se liberará el almacenamiento local de subprocesos (TLS) por el sistema.

El error se produce sólo si se está realizando la genera otro activewhile de aplicaciones basadas en Win32. El mensaje en sí no es byWin32s generado. Se genera por el tiempo de ejecución de Microsoft C (CRT) librariesLIBC.LIB y LIBCMT. LIB.
Solución
En Win32s versión 1,25, índices TLS se liberan durante la limpieza del módulo. Índice de TheTLS es propiedad de módulo principal de la aplicación, por lo que es freedwhen, que la aplicación termina. Se solucionó el problema de andLIBCMT LIBC.

Hay un problema similar con MSVCRT20. DLL. esta versión de la DLL de la CRTallocates un nuevo índice TLS cada vez que un proceso se une a él. MSVCRT20doesn ' t liberar los índices TLS cuando se descarga. El sistema debe liberarlos. Si sólo una aplicación utiliza MSVCRT20 en un momento, entonces la aplicación se puede se generó de correctamente hasta a aproximadamente 60 veces en Win32s versión 1.20. OnWin32s versión 1.25, no hay ninguna limitación.

Si ya hay una aplicación que utiliza MSVCRT20, es notpossible para iniciar y cerrar una segunda aplicación que utiliza más MSVCRT20 aproximadamente 60 veces en Win32s versión 1,25. Esto es porque MSVCRT20allocates un TLS índice cada vez que un proceso se une a él. Win32s será freeall de los índices TLS sólo cuando se descarga MSVCRT20.
Más información
Win32s, asignación de TLS se debe realizar una vez y no por proceso. Eachprocess puede utilizar el índice para almacenar los datos de cada proceso, al igual que un threaduses un índice TLS en Windows NT. Esto es fácil de hacer, porque DLL isshared de datos entre todos los procesos en Win32s.

El ejemplo siguiente muestra cómo realizar la asignación de TLS onWin32s una vez:
   BOOL APIENTRY DllMain(HINSTANCE hinstDll, DWORD fdwReason,           LPVOID lpvReserved)   {       static BOOL fFirstProcess = TRUE;       BOOL fWin32s = FALSE;       DWORD dwVersion = GetVersion();       static DWORD dwIndex;       if ( !(dwVersion & 0x80000000) && LOBYTE(LOWORD(dwVersion))<4 )           fWin32s = TRUE;       if (dwReason == DLL_PROCESS_ATTACH) {           if (fFirstProcess || !fWin32s) {               dwIndex = TlsAlloc();            }            fFirstProcess = FALSE;       }       .       .       .   }				
1.20

Advertencia: este artículo se tradujo automáticamente

Properties

Article ID: 126709 - Last Review: 07/25/2015 10:38:00 - Revision: 5.0

  • kbmt KB126709 KbMtes
Feedback