Obtener el id de la llamada al método actual


122

¿Hay alguna manera de imprimir el id. De hilo actual en el que se está ejecutando el método actual?

(objetivo-c por favor)


3
nall respondió la pregunta, pero no la pregunta real ... ¿por qué quieres saber? Más allá de depurar o afirmar el comportamiento correcto, las cosas básicas en currentThread son generalmente una mala idea.
bbum

Por mi parte, lo necesitaba para crear objetos locales de subprocesos que están unidos a otro objeto (es decir, asociados a un objeto primario y un subproceso, no solo el subproceso).
adib

Respuestas:


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

¿Cuál es el significado de nombre = (nulo), si el subproceso es principal, devuelve NSThread: 0x60800006cb80> {número = 1, nombre = principal}, ¿Significa que "nombre = (nulo)" se refiere al subproceso de fondo.
Nirmala Maurya

¿Y cómo se toma ese nombre y número? namedevuelve una descripción vacía incluso para main y numberno se encuentra en ninguna parte
Hari Karam Singh

Hilo rápido y sucio num: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);

44
@ Rajneesh071 De hecho, ¿qué más esperabas, mostrar la ID de un hilo diferente?
significado importa el

El [NSThread currentThread]método de clase devuelve un objeto NSThread. Puede registrar la dirección de ese objeto de subproceso, pero ¿cómo obtiene la ID numérica del subproceso, como lo que se muestra en el depurador Xcode? (Subproceso 1 para el subproceso principal y números crecientes para cada subproceso adicional creado por su aplicación.)
Duncan C

@Duncan: Es casi seguro que es una característica del depurador, no del sistema operativo / tiempo de ejecución.
Cameron




-1

puedes hackear algo como esto (esto solo se imprime bonito, pero puedes seguir adelante y dividir hasta que obtengas el 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;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.