Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
hexadezimale Thread ID
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

Themenstarter:

hexadezimale Thread ID

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

Themenstarter:

beantworten | zitieren | melden

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 :-)
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

Themenstarter:

beantworten | zitieren | melden

Das ist eigentlich auch eine feine Idee ...

Muss mal schauen, wie gut das machbar ist.

Sind schon ein paar Stellen :-)
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
zommi
myCSharp.de - Member

Avatar #avatar-2617.png


Dabei seit:
Beiträge: 1.361
Herkunft: Berlin

beantworten | zitieren | melden

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 ?
private Nachricht | Beiträge des Benutzers
zommi
myCSharp.de - Member

Avatar #avatar-2617.png


Dabei seit:
Beiträge: 1.361
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers