How do you retrieve the "name" of a thread ?
(see picture of xcode with app paused, where, what I am calling the "name" is highlighted in yellow, "com.apple.coremedia.player.async"... I can retrieve the running threads, and have tried the following, with no luck
mach_msg_type_number_t count, i;
thread_act_array_t list;
task_threads(mach_task_self(), &list, &count);
for (i = 0; i < count; i++) {
if (list[i] == mach_thread_self()) continue;
char theName[16];
memset(theName, 0x00, sizeof(theName));
pthread_getname_np(list[i], theName);
printf("The thread name is %s.\n", theName);
}
NOTE: I am not asking for the thread name of the current thread.. I am interested in getting the thread name from the set of running threads (see example above).. so the solution regarding [NSThread currentThread] will not work
Your problem is simple: task_threads
returns an array of Mach ports, not an array of pthread_t
. In your call to pthread_getname_np
, you are treating a Mach port as a pthread_t
. But a Mach port is not a pthread_t
. You need to convert each to a pthread_t
using pthread_from_mach_thread_np
:
static void dumpThreads(void) {
char name[256];
mach_msg_type_number_t count;
thread_act_array_t list;
task_threads(mach_task_self(), &list, &count);
for (int i = 0; i < count; ++i) {
pthread_t pt = pthread_from_mach_thread_np(list[i]);
if (pt) {
name[0] = '\0';
int rc = pthread_getname_np(pt, name, sizeof name);
NSLog(@"mach thread %u: getname returned %d: %s", list[i], rc, name);
} else {
NSLog(@"mach thread %u: no pthread found", list[i]);
}
}
}
Output from my test program:
2013-03-14 03:21:45.908 hole[28315:c07] url connection complete
2013-03-14 03:21:46.787 hole[28315:c07] mach thread 3079: getname returned 0:
2013-03-14 03:21:46.789 hole[28315:c07] mach thread 6147: getname returned 0:
2013-03-14 03:21:46.790 hole[28315:c07] mach thread 6915: getname returned 0:
2013-03-14 03:21:46.792 hole[28315:c07] mach thread 7683: getname returned 0: WebThread
2013-03-14 03:21:46.794 hole[28315:c07] mach thread 13059: getname returned 0: com.apple.NSURLConnectionLoader
2013-03-14 03:21:46.796 hole[28315:c07] mach thread 16131: getname returned 0:
2013-03-14 03:21:46.798 hole[28315:c07] mach thread 17667: getname returned 0:
2013-03-14 03:21:46.801 hole[28315:c07] mach thread 18187: getname returned 0: com.apple.CFSocket.private
2013-03-14 03:21:46.802 hole[28315:c07] mach thread 20227: getname returned 0:
https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003746
[[NSThread currentThread] name]
should do the trick, I believe.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With