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)


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]);

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);

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




-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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.