Laden...

hexadezimale Thread ID

Erstellt von Wolf_maYer vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.361 Views
Wolf_maYer Themenstarter:in
286 Beiträge seit 2006
vor 15 Jahren
hexadezimale Thread ID

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

Wolf_maYer Themenstarter:in
286 Beiträge seit 2006
vor 15 Jahren

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

3.971 Beiträge seit 2006
vor 15 Jahren

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

Wolf_maYer Themenstarter:in
286 Beiträge seit 2006
vor 15 Jahren

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

Wolf_maYer Themenstarter:in
286 Beiträge seit 2006
vor 15 Jahren

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 😃

4.221 Beiträge seit 2005
vor 15 Jahren

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

Wolf_maYer Themenstarter:in
286 Beiträge seit 2006
vor 15 Jahren

Das ist eigentlich auch eine feine Idee ...

Muss mal schauen, wie gut das machbar ist.

Sind schon ein paar Stellen 😃

Wolf_maYer Themenstarter:in
286 Beiträge seit 2006
vor 15 Jahren

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

1.361 Beiträge seit 2007
vor 15 Jahren

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 ?

1.361 Beiträge seit 2007
vor 15 Jahren

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