- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在创建一个程序,除其他功能外,它还可以淡入和淡出音乐。问题是其他线程/队列可以暂停音乐,这意味着淡入和淡出不仅需要暂停,还需要推迟。我需要能够在 dispatch_after 上暂停“计时器”(因为当音乐开始播放时会调用它以告诉它何时开始淡出,如果暂停则需要延迟)并暂停队列本身(为了在淡入或淡出时暂停淡入或淡出)
这是代码(fadeIn 和 delayFadeOut 都在程序开始时被调用):
- (void) doFadeIn: (float) incriment to: (int) volume with: (AVAudioPlayer*) thisplayer on: (dispatch_queue_t) queue{
dispatch_async(queue, ^{
double delayInSeconds = .1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, queue, ^(void){
thisplayer.volume = (thisplayer.volume + incriment) < volume ? thisplayer.volume + incriment : volume;
NSLog([[[NSNumber alloc] initWithFloat:thisplayer.volume] stringValue]);
if (thisplayer.volume < volume) {
[self doFadeIn:incriment to:volume with:thisplayer on:queue];
}
});
});
}
-(void) doDelayFadeOut: (float) incriment with: (AVAudioPlayer*) thisplayer on: (dispatch_queue_t) queue
{
dispatch_async(queue, ^{
double delayInSeconds = .1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, queue, ^(void){
thisplayer.volume = (thisplayer.volume - incriment) > 0 ? thisplayer.volume - incriment : 0;
NSLog([[[NSNumber alloc] initWithFloat:thisplayer.volume] stringValue]);
if (thisplayer.volume > 0.0) {
[self doDelayFadeOut:incriment with:thisplayer on:queue];
}
});
});
}
-(void) fadeIn: (AVAudioPlayer*) dFade {
if (dFade == nil) {
return;
}
dispatch_queue_t queue = dispatch_queue_create("com.cue.MainFade", NULL);
dispatch_async( queue, ^(void){
if(dFade !=nil){
double incriment = ([self relativeVolume] / [self fadeIn]) / 10; //incriment per .1 seconds.
[self doFadeIn: incriment to: [self relativeVolume] with:dFade on:dispatch_queue_create("com.cue.MainFade", 0)];
}
});
}
- (void) delayFadeOut: (AVAudioPlayer*) dFade { //d-fade should be independent of other threads
if (dFade == nil) {
return;
}
int timeRun = self.duration - self.fadeOut;
dispatch_queue_t queue = dispatch_queue_create("com.cue.MainFade", NULL);
dispatch_time_t mainPopTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeRun * NSEC_PER_SEC));
printf("test");
dispatch_after(mainPopTime, queue, ^(void){
if(dFade !=nil){
double incriment = ([dFade volume] / [self fadeOut])/10; //incriment per .1 seconds.
[self doDelayFadeOut:incriment with:dFade on:dispatch_queue_create("com.cue.MainFade", 0)];
}
});
if (self.cueType == 2) {
[self callNext];
}
}
最佳答案
对于您的一般问题,调用是 dispatch_suspend()
(连同 dispatch_resume()
)。这将阻止调度特定队列上的任何新 block 。它不会对已经运行的 block 产生任何影响。如果你想暂停一个已经安排好并正在运行的 block ,你的代码可以检查一些条件并暂停。
不过,使用它时要理解的关键是,没有什么可以“在 dispatch_after 上暂停“计时器”。”如果你说你想要在 1 秒后派发某些东西,它绝对会在 1 秒后派发。但"dispatch"并不意味着“运行”。它的意思是“排队”。如果该队列被挂起,那么该 block 将挂起直到队列恢复。需要注意的是,您不希望队列中堆积一堆渐变 block 。如果他们这样做了,当您恢复队列时,他们将全部安排背靠背。查看您的代码,这可能不会发生,因此这对您有用。请记住,dispatch 的意思是“排队”。非挂起队列按顺序安排其 block 。
关于ios - 如何暂停 dispatch_queue_t 及其创建的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15462913/
header 显示 dispatch_get_global_queue 返回 global queue 或 NULL。 * @result * Returns the requested glob
我想要锁定 LockQueue2 以完成进程,当解锁 LockQueue2 时,在 dispatch_after 中显示“number is :”number >. 我需要这个输出: number s
我看到了下面一行: @property (nonatomic, strong) dispatch_queue_t filterMainQueue; 为什么将不是对象的dispatch_queue_t实
我是 iPhone 开发的新手,正在经历多线程的 GCD 概念。 'dispatch_queue_t' 创建一个串行队列,我读到串行队列一次只能执行一个作业。 GCD 旨在同时执行多个任务,那么为什么
我想触发一个方法并让它在后台运行——我不关心它启动后到底发生了什么。 所以在我的主 viewDidLoadMethod 中,我有我所有的常用代码和这个: dispatch_queue_t newIm
如果我像这样存储 dispatch_queue_t : @property(assign, nonatomic) dispatch_queue_t myQueue; ... _myQueue = di
这是我在 StackOver flow 中的第 1 篇文章,我的英语不好。我是iOS的初学者,所以我有点慢。 实际上我想从 URL 解析我的 5 个数据(包括图像)。我使用自定义 tableView
我是 Objective-C 语言的菜鸟,我有一点小问题。事实上,我有 2 个 TableView,当我从一个转到另一个时,我从互联网上解析了一些 XML。解析进行得很好,但我想在这两个 View 之
我有关于自定义 DispatchQueue 的问题。 我创建了一个队列,并将其用作captureOutput:方法的队列。这是一个代码片段: //At the file header private
使用这段代码,我可以在后台执行我的代码。 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFA
我对 Objective C 还比较陌生,很容易被各种类型搞糊涂。我正在使用 SquareCam 示例项目中的代码,并将其合并到一个更大的项目中。它工作正常,但现在我想保存类型为 dispatch_q
在可能使用 iOS 5.x/OS X 10.7 部署目标或更新版本构建的库中,我在正确定义 dispatch_queue_t 属性时遇到了问题。 在大多数情况下,我可以按照建议解决它 here : #
这是我的代码: @interface MyObject () @property(nonatomic) dispatch_queue_t queue; @end @implementation MyO
我正在创建一个程序,除其他功能外,它还可以淡入和淡出音乐。问题是其他线程/队列可以暂停音乐,这意味着淡入和淡出不仅需要暂停,还需要推迟。我需要能够在 dispatch_after 上暂停“计时器”(因
我正在创建一个 GCD 调度队列来异步处理创建和保存新的托管对象。 首先,是否有必要将其创建为实例变量?假设我有一个(假设的)方法-newObjectWithProperties: ,我在本地创建了带
我正在尝试写一个 c++包装 grand-central-dispatch (GCD) 队列。 在头文件中是这样的 #include namespace myspace { class Queue
我似乎无法从 Apple 的 GCD 文档中找出 dispatch_queue_t 中的“t”代表什么。 起初我以为是“线程”,但看了之后this question我认为这意味着 typedef。如果
这个问题在这里已经有了答案: How to create dispatch queue in Swift 3 (15 个答案) 关闭 6 年前。 我正在编写我的第一个 Swift 3,但我遇到了以下
我似乎对 dispatch_queue_t 和 NSOperationQueue 队列有些混淆。 默认情况下,AFNetworking 的AFImageRequestOperation 将在应用程序的
我需要进行验证,为此,我需要知道任务是否仍在运行,我使用此代码来启动任务 ` SerialQueue = dispatch_queue_create("miColaEnSerie", NULL
我是一名优秀的程序员,十分优秀!