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.