Pobieranie identyfikatora wątku bieżącego wywołania metody


122

Czy istnieje sposób na wydrukowanie bieżącego identyfikatora wątku, na którym jest wykonywana bieżąca metoda?

(proszę o obiektyw-c)


3
nall odpowiedział na pytanie, ale nie na prawdziwe pytanie… dlaczego chcesz wiedzieć? Oprócz debugowania lub zapewniania prawidłowego zachowania, podstawowe rzeczy na currentThread są ogólnie złym pomysłem.
bbum

Potrzebowałem go do tworzenia obiektów lokalnych wątków, które są dołączone do innego obiektu (tj. Skojarzone z obiektem nadrzędnym i wątkiem - nie tylko wątkiem).
adib

Odpowiedzi:


229
NSLog(@"%@", [NSThread currentThread]);

Jakie jest znaczenie name = (null), jeśli wątek jest główny, zwraca NSThread: 0x60800006cb80> {number = 1, name = main}, Czy to oznacza, że ​​„name = (null)” odnosi się do wątku w tle.
Nirmala Maurya

A jak można zdobyć to nazwisko i numer? namezwraca pusty opis nawet dla main i numbernigdzie go nie ma
Hari Karam Singh

Szybki i brudny numer wątku: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 Rzeczywiście, czego jeszcze się spodziewałeś, wyświetlić identyfikator innego wątku?
znaczenie ma znaczenie

Metoda [NSThread currentThread]klasy zwraca obiekt NSThread. Możesz zarejestrować adres tego obiektu wątku, ale jak uzyskać numeryczny identyfikator wątku, taki jak to, co jest wyświetlane w debugerze Xcode? (Wątek 1 dla głównego wątku i rosnące liczby dla każdego dodatkowego wątku utworzonego przez Twoją aplikację.)
Duncan C

@Duncan: To prawie na pewno funkcja debuggera, a nie system operacyjny / środowisko wykonawcze.
Cameron




-1

możesz coś takiego zhakować (to po prostu drukuje, ale możesz iść dalej i dzielić, aż uzyskasz numer):

+ (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;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.