我正在尝试在视频开始播放时制作 avplayer 的屏幕截图,所以我需要在后台快速运行此代码,这样它不会阻塞主线程和其他控件同时快速运行,尝试运行该代码 GCD 格式我无法运行请帮我这样做,它停在我添加到数组中的位置(在数组中我正在添加 UIImage 对象)...
if (isCaptureScreenStart)
{
if (CMTimeGetSeconds([avPlayer currentTime])>0)
{
if (avFramesArray!=nil)
{
queue = dispatch_queue_create("array", NULL);
dispatch_sync(queue, ^{
[avFramesArray addObject:[self screenshotFromPlayer:avPlayer maximumSize:avPlayerLayer.frame.size :CMTimeGetSeconds([avPlayer currentTime])]];//stop at this line
NSLog(@"count:%d",[avFramesArray count]);
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"Frame are created:%d",[avFramesArray count]);
if ([avFramesArray count]==0)
{
NSLog(@"Frame are over");
}
});
});
}
}
}
dispatch_release(queue);
编辑:
我想我现在需要使用dispatch_group_async
这个块..请给出一些如何使用的指南:
if (isCaptureScreenStart)
{
if (CMTimeGetSeconds([avPlayer currentTime])>0)
{
if (avFramesArray!=nil) {
dispatch_group_async(serial_group1, serial_dispatch_queue1, ^{
[avFramesArray addObject:[self screenshotFromPlayer:avPlayer maximumSize:avPlayerLayer.frame.size :CMTimeGetSeconds([avPlayer currentTime])]];
});
}
}
dispatch_group_notify(serial_group1, serial_dispatch_queue1, ^{
NSLog(@"task competed");
});
}
现在我正在使用这个块,但上面的执行是有争议的运行,如果我使用dispatch_suspend(serial_dispatch_queue1);
它的停止但我需要再次开始块执行,那么我需要使用什么我也尝试dispatch_resume(serial_dispatch_queue1);
再次加载但系统显示我崩溃