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.