Hi,
ich versuche gerade die aktuelle ThreadId in eine Log zu bekommen.
Hierbei mene ich nicht die ManagedThreadId aus System.Threadding sondern ich meine die hexadezimale Zahl, die in Visual Studio auftaucht, wenn man die Ausgabe verfolgt.
Weiß jemand, wo ich die abgreifen kan?
Grüße,
maYer
Ich habe mal weiter geschaut und folgendes gefunden:
string threadId = String.Format("{0:x8}", System.AppDomain.GetCurrentThreadId());
Leider ist die Methode veraltet. Kennt da jemand etwas neues?
Grüße,
maYer
Dafür brauchst du die WinApi-FunktionGetCurrentThreadId Function. Das Ergebnis kannst du dann nach belieben auch in Hexadezimalform darstellen
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hi kleines Eichhörnchen,
Die gibt aber leider für den Hauptthread 1 und den nächsten erstellten 2 usw. zurück.
Das entspricht nicht so ganz den in Visual Studio angezeigten ID´s
Grüße,
maYer
hups, sry würde doch klappen.
Aber ist mir zu teuer, weil das ja für jede Log-Ausgabe gemacht werden müßte.
Und da jedes mal in Unmanaged Code zu hüpfen ... hmm, ne 😃
Eine Frage am Rande:
Wieso gibts Du den Threads keine Namen und loggst dann den Namen ?
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Das ist eigentlich auch eine feine Idee ...
Muss mal schauen, wie gut das machbar ist.
Sind schon ein paar Stellen 😃
ThreadNamen sind implementiert.
Danke für den Hinweis!
Die Log ist wesentlich aufgeräumter!
Trotzdem bleibt meine Frage offen, da ich auf die Hex-Id trotzdem nicht verzichten möchte.
Grüße,
maYer
Hi,
dann hol dir doch mit der WinAPI-Funktion die Thread-ID beim erstellen des Threads und speicher sie.
Falls du irgendwie nen ThreadPool allerdings verwendest und ständig neue Threads laufen lässt (also sind ja dann keine neuen sondern bloß alte, aber du kennst die Zuordnung nicht)
Dann verwende noch ein Dictionary, das die Zuordnung der ManagedThreadIDs in WindowsThreadIDs enthält.
Also einfach die IDs cachen.
Und die IDs von System.Threading.Thread.ManagedThreadId sind anders als die WindowsIDs ?
Hi,
ich hab grad nochmal getestet.
Die WinApi-GetCurrentThreadId-Function springt nicht in den KernelMode.
Die Thread-ID wird also als Information im UserMode gespiegelt und wird somit dort direkt abgefragt.
Sogesehen kostet der Funktionsaufruf also "nichts".
Außerdem isses zwar unmanaged code, aber da er zur WinApi gehört, die ja eh aufgerufen wird, kann man ihm schon vertrauen 😃
Und ob du nun managed oder unmanaged Code aufrust, ist egal. das kostet gleich viel.
Also kannst du schon bei jeden Log-Eintrag den Aufruf machen.
Außerdem ist das Log-File doch sicherlich in ner Datenbank, oder ner Datei. Das ist dann eh der Flaschenhals.
beste Grüße
zommi