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)
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)
Réponses:
NSLog(@"%@", [NSThread currentThread]);
name
renvoie une description vide même pour main et number
est introuvable
NSString *s = [NSString stringWithFormat:@"%@", [NSThread currentThread]]; int threadNum = -1; sscanf(s.UTF8String, "<NSThread: 0x%*12[0-9a-f]>{number = %d", &threadNum);
#include <pthread.h>
...
mach_port_t machTID = pthread_mach_thread_np(pthread_self());
NSLog(@"current thread: %x", machTID);
[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.)
Dans Swift 5
print("Current thread \(Thread.current)")
Dans Swift
print("Current thread \(NSThread.currentThread())")
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;
}