Czy istnieje sposób na wydrukowanie bieżącego identyfikatora wątku, na którym jest wykonywana bieżąca metoda?
(proszę o obiektyw-c)
Czy istnieje sposób na wydrukowanie bieżącego identyfikatora wątku, na którym jest wykonywana bieżąca metoda?
(proszę o obiektyw-c)
Odpowiedzi:
NSLog(@"%@", [NSThread currentThread]);
name
zwraca pusty opis nawet dla main i number
nigdzie go nie ma
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]
klasy zwraca obiekt NSThread. Możesz zarejestrować adres tego obiektu wątku, ale jak uzyskać numeryczny identyfikator wątku, taki jak to, co jest wyświetlane w debugerze Xcode? (Wątek 1 dla głównego wątku i rosnące liczby dla każdego dodatkowego wątku utworzonego przez Twoją aplikację.)
W Swift 5
print("Current thread \(Thread.current)")
W Swift
print("Current thread \(NSThread.currentThread())")
możesz coś takiego zhakować (to po prostu drukuje, ale możesz iść dalej i dzielić, aż uzyskasz numer):
+ (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;
}