//threadID - zur Laufzeit ermitteln (plattform unabhaengig)
-
Gibt es eine Möglichkeit mit std-Funktionen die aktuelle ThreadID herauszubekommen?
unter Linux:
threadID = _gettid();
und bei der WinAPI
THREADID threadID; thread_create(Thread::EntryPoint, (void*) p, &threadID);
Letztlich kapsel ich sowas in eine util-Funktion, aber ich benötige noch eine Funktion, die mir zu einem beliebigen Zeitpunkt die ThreadID mitteilt, nicht nur beim Generieren des Threads! Unabhängig von der verwendeten Thread-Bibiliothek (bei boost::thread gibt es eine eigene ID-Klasse und bei pthreads biegen die meisten die Zeiger in einen Integer um (reinterpret_cast), was auf 64 bit Platformen nach hinten losgehen kann, da ein Pointer 8 anstatt 4 byte hat).
-
muffmolch schrieb:
Gibt es eine Möglichkeit mit std-Funktionen die aktuelle ThreadID herauszubekommen?
Die Frage kannst du dir doch eigentlich selbst beantworten - wenn Standard-C++ keine Threads kennt, kann es auch nicht an eine ThreadID kommen. Klingt logisch, oder?
Nachtrag: ...wenn Standard-C++ *noch* keine Threads kennt. Aber wir gehen ja einer hellen Zukunft entgegen
-
ja, das ist ja auch i.O., wenn es eine System-Funktion diesbezüglich unter Windows geben würden... denn gettid funktioniert unter Unix einwandfrei. Und irgendsoetwas MUSS es unter Windows auch geben, denn der Debugger des VS muss diese Info auch irgendwoher beziehen
PS: meinte mit "std"-Funktionen in diesem Fall auch "std-Systemfunktionen"
-
Und wieso fragst du dann nich im WinAPI Forum nach?
Oder wieso suchst du nicht schnell in der MSDN? Suche von weniger als 10 Sekunden ergab bei mir das folgende:
http://msdn.microsoft.com/en-us/library/ms683183(VS.85).aspxGrüssli
-
Dravere schrieb:
Und wieso fragst du dann nich im WinAPI Forum nach?
naja, weil ich es eben für verschiedene Plattformen braucht und nicht in allen Foren fragen wollte
zudem habe ich insgeheim auf eine globale C++ Lösung gehofft...
Aber der Link hilft schonmal weiter, danke
-
okay, nur falls jemand einmal per Suchfunktion ueber diesen Thread stolpert, so funktioniert es erstmal:
#if defined UB_WINDOWS #include <windows.h> #elif defined UB_LINUX #include <sys/syscall.h> #endif inline unsigned long getCurrentThreadID() { #if defined UB_WINDOWS return (unsigned long)GetCurrentThreadId(); #elif defined UB_LINUX return (unsigned long)syscall(SYS_gettid); #endif }