【发布时间】:2014-03-06 09:36:37
【问题描述】:
我正在尝试使用持续运行的线程在我的应用程序中高速执行任务。 在这个应用程序中,我有一个包含 1000 个左右时间戳的列表。我轮询他们,直到他们的时间到了,然后指示一个 ausampler 玩。
我的问题是我似乎根本不了解 NSThread 是如何工作的。在下面的简单示例中,尽管没有运行任何任务,但 cpu 仍会达到 100%。
我以什么方式错误地使用了 NSThread? 有什么更好的方法来创建一个不占用 CPU 的非常快速的轮询机制?
myThread =[[NSThread alloc]initWithTarget:self selector:@selector(test) object:Nil];
[audioThread setThreadPriority:0];
[audioThread start];
-(void)test
{
while(mycondition)
{
// do my work
// cpu == 100%
}
}
【问题讨论】:
-
while 循环阻塞了主运行循环...您应该查看的是concurrent programming guide of Apple。为了更好地帮助您,需要更多详细信息。
-
这真的很奇怪。我在 while 循环中检查了 [NSThread isMainThread],它返回 NO。
-
您可以在 AUSampler 的渲染回调中发送事件。这样就不必管理任何线程,并且您可以获得样本准确性。
标签: ios7 core-audio nsthread