PRB: Win32s でエラー: R6016 - スレッド データ領域が足りません。

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:126709
サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。
現象
起動し、アプリケーションの終了を繰り返し、約 60 回が成功し、このエラーの生成が失敗した場合します。
R6016 - スレッド データ領域が足りません。
原因
スレッド ローカル ストレージ (TLS) は、システムによっては解放されません。

産み落とすを実行する別の Win32 ベースのアプリケーション activewhile がある場合にのみ、エラーが発生します。メッセージ自体は、生成された byWin32s ではありません。LIBCMT と Microsoft C ランタイム (CRT) の librariesLIBC.LIB によって生成されます。LIB.
解決方法
Win32s バージョン 1.25 では、TLS インデックスは、モジュールのクリーンアップ中に解放されます。TheTLS インデックスは、み収のアプリケーションを終了になるようにアプリケーションのメイン モジュールが所有します。LIBC andLIBCMT の問題は解決しました。

MSVCRT20 と同様の問題があります。Dll この DLL のバージョンの CRTallocates のたびに新しい TLS インデックスをプロセスにアタッチします。アンロードするときに、TLS インデックスを解放 ' t MSVCRT20doesn。システムは、それらを解放する必要があります。1 つのアプリケーションでは、同時に MSVCRT20 を使用する場合にのみ、アプリケーションは正常に最大するために生成 Win32s バージョン 1.20 で約 60 回。OnWin32s バージョン 1.25、制限はありません。

MSVCRT20 を使用するアクティブなアプリケーションが既にいる場合を起動し、Win32s バージョン 1.25 で約 60 回 MSVCRT20 以上を使用する 2 番目のアプリケーションを閉じることはできません。プロセスが接続すると、TLS のインデックスを作成するたびに MSVCRT20allocates ためにです。MSVCRT20 がアンロードされるときにのみ、TLS インデックスの Win32s は freeall です。
詳細
Win32s では、[TLS 割り当てする必要があります 1 回実行し、プロセス単位ではないです。Eachprocess は、threaduses の Windows NT 上の TLS のインデックスと同様、プロセスごとのデータを格納するのにインデックスを使用することができます。これは簡単に行うには、Win32s の下のすべてのプロセス間で DLL のデータのとき。

次の例では、TLS の割り当てを行う方法と 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

Proprietà

ID articolo: 126709 - Ultima revisione: 09/28/2016 00:08:00 - Revisione: 6.0

  • kbmt KB126709 KbMtja
Feedback