如何判断当前线程是否创建为NSThread?

时间:2013-02-05 05:55:47

标签: ios multithreading macos cocoa pthreads

我从购买的媒体流SDK库中获得了C ++回调,它在内部创建了几个线程。

具体来说,当库想要记录消息时,我会收到回调。有时我在一些NSThread的上下文中调用,其中有一个Autorelease池,但有时我从其他线程调用,没有自动释放池。一些调用线程是实时线程(音频抓取等),因此性能很重要。

如何区分我在NSThread(应用程序的主线程或其他NSThreads)中调用的情况和由SDK库创建的内部“仅C ++”线程?

Apple的文档中没有任何内容告诉我使用

时会发生什么

[NSThread currentThread]

当我在另一种线程的上下文中时,当我在NSThread上调用pthreadSelf()或类似的API时会发生什么。

此外,如果可能的话,我想听听有关将自动释放池附加到这些内部线程的想法,以及关于不时耗尽它们的想法。

感谢。

1 个答案:

答案 0 :(得分:3)

NSThread是pthread之上的包装器,因此如果线程是使用pthread_self,pthread,GCD或C ++线程API创建的,NSThread将始终返回有效的线程对象!

[NSThread currentThread]也会返回一个NSThread对象,即使该帖子未使用NSThread API创建并使用公共API也无法告诉他们返回的对象只是一个代理或一个"实际的" NSThread

您可以使用@autoreleasepool指令生成轻量级自动释放池。