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)

Alexi Groove
fuente
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]);
nall
fuente
¿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);
neoneye
fuente
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
25

En Swift 5

print("Current thread \(Thread.current)")
dimo hamdy
fuente
12

En veloz

print("Current thread \(NSThread.currentThread())")
Glauco Neves
fuente
3

En Swift4

print ("\ (Thread.current)")

Jason
fuente
-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;
}
Fenómeno
fuente