Problema: Erro no Win32s: R6016 - não existe espaço suficiente para os dados do thread

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 126709
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
A desova e fecho repetidamente uma aplicação for bem sucedida aproximadamente 60 vezes e, em seguida, a geração falha com este erro:
R6016 - não existe espaço suficiente para os dados do thread
Causa
O thread de armazenamento local (TLS) não é libertado pelo sistema.

A falha ocorre apenas se existir outra aplicação baseada no Win32 activewhile que está a fazer a se. A própria mensagem não é gerado byWin32s. Este é gerado pelo Microsoft C Run-time (CRT) librariesLIBC.LIB e LIBCMT. LIB.
Resolução
Na versão Win32s 1,25, índices TLS são libertados durante a limpeza de módulo. Índice de TheTLS é propriedade pelo módulo principal da aplicação, para que seja freedwhen que a aplicação terminar. Isto resolve o problema de LIBC andLIBCMT.

Existe um problema semelhante com MSVCRT20. DLL. DLL esta versão do CRTallocates um novo índice TLS sempre que um processo anexa ao mesmo. MSVCRT20doesn ' t libertar os índices TLS quando descarga. O sistema deverá libertá-los. Se apenas a uma aplicação utiliza MSVCRT20 ao mesmo tempo, em seguida, o canbe de aplicação gerada com êxito até cerca de 60 vezes Win32s versão 1.20. Versão OnWin32s 1,25, sem limitação não existe.

Se já existir uma aplicação activa que utiliza MSVCRT20, é notpossible para expandir e fechar uma aplicação segunda que utiliza MSVCRT20 morethan aproximadamente 60 vezes Win32s versão 1,25. Isto acontece porque MSVCRT20allocates um TLS indexar sempre que um processo anexa ao mesmo. Win32s será freeall dos índices TLS apenas quando MSVCRT20 é descarregado.
Mais Informação
No Win32s, atribuição de TLS deve ser efectuada uma vez e não por processo. Eachprocess pode utilizar o índice para armazenar dados por processo, tal como um threaduses um índice TLS no Windows NT. Este é fácil de fazer, porque o DLL isshared de dados entre todos os processos no Win32s.

O exemplo seguinte demonstra como efectuar a alocação de TLS onWin32s uma 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

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 126709 - Última Revisão: 02/02/2016 03:12:00 - Revisão: 5.0

  • kbmt KB126709 KbMtpt
Comentários
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)