3

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

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

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

Apple 的文档中没有任何内容告诉我使用时会发生什么

[NSThread 当前线程]

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

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

谢谢。

4

1 回答 1

3

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

[NSThread currentThread]NSThread即使线程不是使用 API 创建的并且使用公共 API也将返回一个对象NSThread,无法判断返回的对象是代理还是“实际” NSThread

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

于 2013-02-05T06:01:15.193 回答