Obtenir l'ID de thread de l'appel de méthode actuel


122

Existe-t-il un moyen d'imprimer l'ID de thread actuel sur lequel la méthode actuelle s'exécute?

(objectif-c s'il vous plaît)


3
nall a répondu à la question, mais pas à la vraie question ... pourquoi voulez-vous savoir? Au-delà du débogage ou de l'affirmation d'un comportement correct, les éléments de base sur currentThread sont généralement une mauvaise idée.
bbum

Pour ma part, j'en avais besoin pour créer des objets thread-locaux qui sont attachés à un autre objet (c'est-à-dire associés à un objet parent et un thread - pas seulement le thread).
adib

Réponses:


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

Quelle est la signification de name = (null), si le thread est principal, il renvoie NSThread: 0x60800006cb80> {number = 1, name = main}, cela signifie-t-il que "name = (null)" fait référence au thread d'arrière-plan.
Nirmala Maurya

Et comment saisir ce nom et ce numéro? namerenvoie une description vide même pour main et numberest introuvable
Hari Karam Singh

Numéro de fil rapide et sale: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 En effet, à quoi vous attendiez-vous d'autre, afficher l'ID d'un fil différent?
sens-questions

La [NSThread currentThread]méthode de classe renvoie un objet NSThread. Vous pouvez enregistrer l'adresse de cet objet de thread, mais comment obtenir l'ID de thread numérique, comme ce qui est affiché dans le débogueur Xcode? (Thread 1 pour le thread principal et nombre croissant pour chaque thread supplémentaire créé par votre application.)
Duncan C

@Duncan: C'est presque certainement une fonctionnalité du débogueur, pas du système d'exploitation / runtime.
Cameron




-1

vous pouvez pirater quelque chose comme ça (cela imprime juste joli, mais vous pouvez continuer et diviser jusqu'à ce que vous obteniez le numéro):

+ (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;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.