gpt4 book ai didi

objective-c - 将audioUnit或另一个类设置为不在主线程上

转载 作者:行者123 更新时间:2023-12-03 17:41:14 25 4
gpt4 key购买 nike

我有一个主视图(或 cocos2d 中的场景),在应用程序启动时打开。从那里我调用audioUnit来监听来自麦克风的输入音频。它工作得很好(audioUnit 上的回调总是被调用并做一些事情),但我可以看到它需要主线程 - 这是我不想要的,因为主场景有 UILabel 和其他需要的东西成为主线程才能改变。

主场景我在开始时做:

remoteIns=[[remoteIO alloc]init]; //turn on the callback function on class remoteIO .
[remoteIns StartListeningWithFrequency]; // this function takes the main thread

然后当我稍后检查主场景时:

NSLog(@"isMainThread%d",[NSThread isMainThread]);

我可以看到它不是主线程,因此我无法更改其中的 UILabels

我需要启动audioUnit函数(另一个类)并将其设置在另一个线程中,保持主场景为主线程,并让audioUnit正常工作。

最佳答案

在主线程上运行某些内容的更简单方法是使用 block 。这样,您就可以执行多个操作,并且它看起来像“正常”代码。调用带有两个以上参数的例程也简单得多:

dispatch_sync(dispatch_get_main_queue(), ^{
// Any code that you put in here will be run on the main thread.
// However, MAKE SURE that you do not actually call this from the main thread or
// your program will hang!

// i.e.:
self.label.text = @"New text";
});

关于objective-c - 将audioUnit或另一个类设置为不在主线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com