PRB: Fehler Win32s: R6016 - nicht genügend Speicher für Threaddaten

Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 126709
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.
Problembeschreibung
Starten und Schließen einer Anwendung wiederholt etwa 60 Mal erfolgreich und die Spawn schlägt fehl mit Fehler:
R6016 - nicht genügend Speicher für Threaddaten
Ursache
Lokalen Threadspeicher (TLS) ist vom System reserviert.

Der Fehler tritt nur bei anderen Win32-basierte Anwendung Activewhile erzeugt das tun. Die Nachricht selbst ist nicht generierten byWin32s. Es wird durch die Microsoft C-Laufzeit (CRT) librariesLIBC.LIB und LIBCMT. LIB.
Lösung
Win32s Version 1,25 werden TLS Indizes beim Modul Cleanup freigegeben. TheTLS Index gehört die Anwendung Hauptmodul, Freedwhen kann die Anwendung beendet wird. Dies löst das Problem für LIBC AndLIBCMT.

Es gibt ein ähnliches Problem mit MSVCRT20. DLL. dieser DLL-Version der CRTallocates einen neuen TLS-Index jedes Mal Fügt ein Prozess zu. MSVCRT20doesn kostenlos t TLS Indizes entladen. Das System sollte diese frei geben. Wenn nur eine Anwendung gleichzeitig MSVCRT20 verwendet, erzeugt der Anwendung können erfolgreich bis 60 Zeiten Win32s Version 1.20. OnWin32s Version 1.25, es gibt keine Einschränkung.

Ist bereits eine aktive Anwendung, MSVCRT20, ist nichtmöglich erzeugen und eine zweite Anwendung, MSVCRT20 sagen etwa 60 Mal unter Win32s Version 1.25 schließen. Ist MSVCRT20allocates einen TLS-index jedes Mal zu ein Prozess angefügt. Win32s wird Freeall der TLS-Indizes nur MSVCRT20 entladen wird.
Weitere Informationen
Auf Win32s, TLS Zuordnung sollte durchführen und nicht pro Prozess. Eachprocess können den Index Prozessdaten, wie Threaduses einen TLS-Index auf Windows NT speichern. Dies ist einfach, da DLL Daten Isshared allen Prozessen unter Win32s.

Im folgenden Beispiel wird veranschaulicht, wie TLS erledigen einmal onWin32s:
   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

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 126709 – Letzte Überarbeitung: 04/04/2016 02:34:00 – Revision: 4.0

  • kbmt KB126709 KbMtde
Feedback