Mac/iPhone:有没有办法在不使用Objective-C的情况下获取线程标识符?

Tee*_*ppa 13 iphone macos pthreads

有没有办法获得当前正在运行的线程的任何类型的线程标识符,而无需求助于Objective-C的NSThread.

我正在改进我们的自定义调试跟踪系统,以正确处理多个线程.对于每行跟踪输出,我想打印一个线程ID或一个线程名称.线程以各种方式实例化,例如使用NSOperationQueue和pthread函数.

我目前有以下两种选择,但我对其中任何一种都不满意.还有其他选择吗?

pthread_t选项

pthread_t似乎是特定平台的typedef _opaque_pthread_h.现在可以使用字段_opaque_pthread_h,即使它是hack-y而且不可移植.它有一个__siglong类型的字段,但是对于我的进程的所有线程,它似乎具有相同的值.

NSThread选项

[NSThread name]需要NSAutoreleasePool在适当的位置,但我不希望这是一个要求,因为我们的大多数代码都是纯C++,所以在没有自动释放池包装的情况下启动c ++函数会很好.

Tee*_*ppa 23

我发现了一种足以获得跟踪输出的唯一标识符的方法.

pthread_mach_thread_np 可以用来获取线程标识符,iPhone上的unsigned int.

mach_port_t tid = pthread_mach_thread_np(pthread_self());
Run Code Online (Sandbox Code Playgroud)

显然,这是在NSLog输出中使用的相同线程ID.