2009-10-24 9 views
110

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

(Objective-C bitte)

+3

nall beantwortet die Frage, aber nicht die eigentliche Frage .... warum wollen Sie wissen? Abgesehen von der Fehlersuche oder der Bestätigung des korrekten Verhaltens ist basic stuff auf currentThread * generell * eine schlechte Idee. – bbum

+0

Ich für einen brauchte es zum Erstellen thread-lokale Objekte, die an ein anderes Objekt (d. H. Mit einem übergeordneten Objekt verbunden sind _and_ thread - nicht nur der Thread). – adib

Antwort

202
NSLog(@"%@", [NSThread currentThread]); 
+6

{name = (null), num = 1} – Rajneesh071

+0

Was ist die Bedeutung von name = (null), wenn Thread Main ist, gibt es NSThread zurück: 0x60800006cb80> {Nummer = 1, Name = Haupt}, Does es bedeutet "name = (null)" bezieht sich auf Hintergrund-Thread. –

+0

Und wie greift man diesen Namen und diese Nummer? 'name' gibt leere Beschreibung zurück auch für main und' number' ist nirgends zu finden –

29
#include <pthread.h> 
... 
mach_port_t machTID = pthread_mach_thread_np(pthread_self()); 
NSLog(@"current thread: %x", machTID); 
+0

Es wird immer der aktuelle Thread angezeigt: c07 – Rajneesh071

+3

@ Rajneesh071 In der Tat, was hast du sonst noch? erwarte, zeige die ID eines anderen Threads an? –

+0

ja .. wenn ich auf anderen thread bin dann anders anzeigen. – Rajneesh071

-1

Sie etwas nach oben so hacken kann (dies nur recht druckt, aber Sie können vor und Split gehen, 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; 
} 
11

In Swift

print("Current thread \(NSThread.currentThread())") 
16

In swift3

print("Current thread \(Thread.current)") 
Verwandte Themen