W8136 Initialisierung von TLS-Daten wird auf dieser Plattform nicht unterstützt. (C++)
Nach oben zu Compiler-Fehler und -Warnungen (C++) - Index
Auf der OS X-Plattform sind beispielsweise TLS-Variablen (Thread-lokale Speichervariablen) mit null initialisiert und können nicht mit einem anderen Wert initialisiert werden.
Diese Variablen müssen zur Laufzeit initialisiert werden. Wenn TLS-Variablen Nicht-Nullwerte haben sollen, dann muss jeder Thread, einschließlich des Haupt-Threads, diese Variablen, wie im folgenden Beispiel gezeigt, initialisieren:
#include <stdio.h>
#include <string.h>
#include <process.h>
int __declspec(thread) iVal = 1000;
char __declspec(thread) sVal[] = "ABCDEFG";
float __declspec(thread) fVal = 2.5;
#if defined(__APPLE__)
static void initTLSVars()
{
iVal = 1000;
strcpy(sVal, "ABCDEF");
fVal = 2.5;
}
#endif
static void printTLSVars()
{
printf("Thread Id:(%08X) - ", __threadid());
printf("iVal='%d', sVal='%s', fVal='%f'\n", iVal, sVal, fVal);
}
void threadHandler(void* /*data*/)
{
// TLS must be explicitly initialized on OSX
#if defined(__APPLE__)
initTLSVars();
#endif
printTLSVars();
}
bool runThreads()
{
#if defined(__APPLE__)
__borland_use_pthreads();
#endif
_beginthread(&threadHandler, 0, 0);
_beginthread(&threadHandler, 0, 0);
return true;
}
int main()
{
#if defined(__APPLE__)
initTLSVars();
#endif
printTLSVars();
runThreads();
// Wait for input before terminating
getchar();
return 0;
}
Ohne die Aufrufe von initTLSVars()
für den Mac würde das Programm Nullen für die drei Thread-lokalen Speichervariablen ausgeben.
Unter Windows muss initTLSVars()
nicht aufgerufen werden, weil das BS eine integrierte TLS-Unterstützung bereitstellt.
Diese Warnung ist per Voreinstellung aktiviert. Übergeben Sie zur Deaktivierung dieser Warnung -w-itl
oder -w-8136
an den Compiler.