Получение идентификатора потока текущего вызова метода

122

Есть ли способ распечатать идентификатор текущего потока, в котором выполняется текущий метод?

(цель-с, пожалуйста)

Алекси Грув
источник
3
все ответил на вопрос, но не на настоящий вопрос .... почему вы хотите знать? Помимо отладки или подтверждения правильного поведения, базовые вещи в currentThread, как правило, являются плохой идеей.
bbum
Мне, например, нужно было создавать локальные для потока объекты, которые прикреплены к другому объекту (т.е. связаны с родительским объектом и потоком, а не только с потоком).
адиб

Ответы:

229
NSLog(@"%@", [NSThread currentThread]);
Нолл
источник
Что означает name = (null), если поток является основным, он возвращает NSThread: 0x60800006cb80> {number = 1, name = main}. Означает ли это, что «name = (null)» относится к фоновому потоку.
Нирмала Маурья
А как взять это имя и номер? nameвозвращает пустое описание даже для основного и numberнигде не может быть найдено
Хари Карам Сингх
Быстрый и грязный номер NSString *s = [NSString stringWithFormat:@"%@", [NSThread currentThread]]; int threadNum = -1; sscanf(s.UTF8String, "<NSThread: 0x%*12[0-9a-f]>{number = %d", &threadNum);
Хари Карам Сингх
35
#include <pthread.h>
...
mach_port_t machTID = pthread_mach_thread_np(pthread_self());
NSLog(@"current thread: %x", machTID);
neoneye
источник
4
@ Rajneesh071 Действительно, а чего еще вы ожидали, отобразить ID другого потока?
значение-имеет значение
Метод [NSThread currentThread]класса возвращает объект NSThread. Вы можете зарегистрировать адрес этого объекта потока, но как получить числовой идентификатор потока, например, что отображается в отладчике Xcode? (Поток 1 для основного потока и увеличивающиеся числа для каждого дополнительного потока, созданного вашим приложением.)
Дункан Си,
@Duncan: Это почти наверняка функция отладчика, а не ОС / среды выполнения.
Кэмерон
25

В Swift 5

print("Current thread \(Thread.current)")
Димо Хамди
источник
12

В Swift

print("Current thread \(NSThread.currentThread())")
Глауко Невес
источник
3

В Swift4

печать ( "\ (Thread.current)")

Джейсон
источник
-1

вы можете взломать что-то вроде этого (это просто красиво печатается, но вы можете продолжить и разделить, пока не получите номер):

+ (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;
}
волшебник
источник