//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"


  • Administrator

    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).aspx

    Grü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
    }
    

Log in to reply