Ottenere l'ID thread della chiamata al metodo corrente


122

C'è un modo per stampare l'ID thread corrente su cui è in esecuzione il metodo corrente?

(obiettivo-c per favore)


3
nessuno ha risposto alla domanda, ma non alla domanda vera .... perché lo vuoi sapere? Al di là del debug o dell'asserzione di un comportamento corretto, le cose di base su currentThread sono generalmente una cattiva idea.
— bbum

Io per primo ne avevo bisogno per creare oggetti locali del thread che sono attaccati a un altro oggetto (cioè associati a un oggetto genitore e thread, non solo al thread).
— adib

Risposte:


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

Qual è il significato di name = (null), se il thread è main restituisce NSThread: 0x60800006cb80> {number = 1, name = main}, Significa che "name = (null)" si riferisce al thread in background.
— Nirmala Maurya

E come si fa a prendere quel nome e quel numero? namerestituisce una descrizione vuota anche per il principale e numbernon si trova da nessuna parte
— Hari Karam Singh

Numero di thread veloce e sporco: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 In effetti, cos'altro ti aspettavi, visualizzare l'ID di un thread diverso?
— significato-conta

Il [NSThread currentThread]metodo della classe restituisce un oggetto NSThread. È possibile registrare l'indirizzo di quell'oggetto thread, ma come si ottiene l'ID numerico del thread, come quello visualizzato nel debugger Xcode? (Thread 1 per il thread principale e numeri crescenti per ogni thread aggiuntivo creato dalla tua app.)
— Duncan C

@ Duncan: Quasi certamente è una caratteristica del debugger, non del sistema operativo / runtime.
— Cameron



3

In Swift4

stampare ( "\ (Thread.current)")


-1

puoi hackerare qualcosa come questo (questo è semplicemente carino, ma puoi andare avanti e dividere finché non ottieni il numero):

+ (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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.