Obtendo o ID do Encadeamento da Chamada de Método Atual


122

Existe uma maneira de imprimir o ID do segmento atual no qual o método atual está sendo executado?

(objetivo-c, por favor)


3
nall respondeu à pergunta, mas não a pergunta real .... por que você quer saber? Além de depurar ou afirmar o comportamento correto, o básico sobre o currentThread geralmente é uma má ideia.
Bb 24/10/09

Eu, pelo menos, precisava criar objetos thread-locais que estão anexados a outro objeto (isto é, associados a um objeto pai e thread - não apenas ao thread).
adib 15/12/10

Respostas:


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

Qual é o significado de name = (null), se o thread for principal, ele retornará NSThread: 0x60800006cb80> {number = 1, name = main}, significa "name = (null)" refere-se ao thread de segundo plano.
Nirmala Maurya

E como se pega esse nome e número? nameretorna descrição vazia, mesmo para o principal e numberestá longe de ser encontrada
Hari Karam Singh

Rápido e num fio sujo: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 De fato, o que mais você esperava, exibir o ID de um segmento diferente?
significado-importa

O [NSThread currentThread]método de classe retorna um objeto NSThread. Você pode registrar o endereço desse objeto de thread, mas como obter o ID numérico do thread, como o que é exibido no depurador do Xcode? (Thread 1 para o segmento principal, e um número crescente para cada segmento adicional que é criado pelo seu app.)
Duncan C

@ Duncan: Isso é quase certamente um recurso do depurador, não do sistema operacional / tempo de execução.
Cameron




-1

você pode hackear algo assim (isso é bonito, mas você pode ir em frente e dividir até obter o número):

+ (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;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.