2009-10-24 15 views
110

¿Existe alguna manera de imprimir la Id. De subproceso actual en la que se está ejecutando el método actual?Obtención de la Id. De subproceso de la llamada al método actual

(Objective-C por favor)

+3

nall respondieron a la pregunta, pero no la verdadera pregunta .... ¿Por qué quieres saber? Más allá de la depuración o la afirmación del comportamiento correcto, las cosas básicas en currentThread son * generalmente * una mala idea. – bbum

+0

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

Respuesta

202
NSLog(@"%@", [NSThread currentThread]); 
+6

{name = (null), num = 1} – Rajneesh071

+0

¿Cuál es el significado de name = (null), si thread es main, devuelve NSThread: 0x60800006cb80> {number = 1, name = main}, Does significa que "nombre = (nulo)" se refiere al hilo de fondo. –

+0

¿Y cómo se puede obtener ese nombre y número? 'name' devuelve una descripción vacía incluso para main y' number' no se encuentra en ninguna parte –

29
#include <pthread.h> 
... 
mach_port_t machTID = pthread_mach_thread_np(pthread_self()); 
NSLog(@"current thread: %x", machTID); 
+0

siempre mostrando el hilo actual: c07 – Rajneesh071

+3

@ Rajneesh071 De hecho, ¿qué otra cosa hizo? esperar, mostrar la ID de un hilo diferente? –

+0

sí ... si estoy en un hilo diferente, entonces mostrar diferentes. – Rajneesh071

-1

se puede hackear algo como esto (esto sólo imprime bastante, pero se puede seguir adelante y dividida hasta que se obtiene 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; 
} 
11

En Swift

print("Current thread \(NSThread.currentThread())") 
16

En Swift3

print("Current thread \(Thread.current)") 
Cuestiones relacionadas