Abrufen der Thread-ID des aktuellen Methodenaufrufs

122

Gibt es eine Möglichkeit, die aktuelle Thread-ID auszudrucken, auf der die aktuelle Methode ausgeführt wird?

(Ziel-c bitte)

Alexi Groove
quelle
3
nall beantwortete die Frage, aber nicht die eigentliche Frage .... warum willst du das wissen? Über das Debuggen oder das Bestätigen des richtigen Verhaltens hinaus sind grundlegende Dinge in currentThread im Allgemeinen eine schlechte Idee.
bbum
Ich jedenfalls brauchte es, um threadlokale Objekte zu erstellen, die an ein anderes Objekt angehängt sind (dh einem übergeordneten Objekt und Thread zugeordnet sind - nicht nur dem Thread).
Adib

Antworten:

227
NSLog(@"%@", [NSThread currentThread]);
nall
quelle
Was bedeutet name = (null)? Wenn der Thread main ist, wird NSThread zurückgegeben: 0x60800006cb80> {number = 1, name = main}. Bedeutet dies, dass "name = (null)" sich auf den Hintergrundthread bezieht.
Nirmala Maurya
Und wie greift man nach diesem Namen und dieser Nummer? namegibt leere Beschreibung auch für main zurück und numberist nirgends zu finden
Hari Karam Singh
Schnelle und schmutzige Fadennummer:NSString *s = [NSString stringWithFormat:@"%@", [NSThread currentThread]]; int threadNum = -1; sscanf(s.UTF8String, "<NSThread: 0x%*12[0-9a-f]>{number = %d", &threadNum);
Hari Karam Singh
35
#include <pthread.h>
...
mach_port_t machTID = pthread_mach_thread_np(pthread_self());
NSLog(@"current thread: %x", machTID);
neoneye
quelle
4
@ Rajneesh071 Was haben Sie sonst noch erwartet, um die ID eines anderen Threads anzuzeigen?
Sinn-Angelegenheiten
Die [NSThread currentThread]Klassenmethode gibt ein NSThread-Objekt zurück. Sie können die Adresse dieses Thread-Objekts protokollieren, aber wie erhalten Sie die numerische Thread-ID, wie sie im Xcode-Debugger angezeigt wird? (Thread 1 für den Haupt-Thread und zunehmende Anzahl für jeden zusätzlichen Thread, der von Ihrer App erstellt wurde.)
Duncan C
@ Duncan: Das ist mit ziemlicher Sicherheit eine Funktion des Debuggers, nicht das Betriebssystem / die Laufzeit.
Cameron
25

In Swift 5

print("Current thread \(Thread.current)")
Dimo Hamdy
quelle
12

In Swift

print("Current thread \(NSThread.currentThread())")
Glauco Neves
quelle
3

In Swift4

print ("\ (Thread.current)")

Jason
quelle
-1

Sie können so etwas hacken (dies wird nur hübsch gedruckt, aber Sie können fortfahren und teilen, bis Sie die Nummer erhalten):

+ (NSString *)getPrettyCurrentThreadDescription {
    NSString *raw = [NSString stringWithFormat:@"%@", [NSThread currentThread]];

    NSArray *firstSplit = [raw componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"{"]];
    if ([firstSplit count] > 1) {
        NSArray *secondSplit     = [firstSplit[1] componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"}"]];
        if ([secondSplit count] > 0) {
            NSString *numberAndName = secondSplit[0];
            return numberAndName;
        }
    }

    return raw;
}
Wiz
quelle