我想拍两张照片并希望它们按顺序运行。使用异步运行的方法完成捕获图片的方法。我目前使用信号量尝试同步它,但它会阻止程序运行。我相信这是因为completionHandler在同一个线程上运行,并且由于线程被锁定,它无法执行以释放信号量。 这是我目前的代码:
camera_sema = dispatch_semaphore_create(0);
[photoOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
[flash turnOffFlash];//turning off flash for second picture
//perform needed work
dispatch_semaphore_signal(camera_sema);
}];
dispatch_semaphore_wait(camera_sema, DISPATCH_TIME_FOREVER);
有没有办法可以在这种情况下使用dispatch_async,或者在另一个后台线程上运行completionHandler,以便能够执行?
更新1: 这有效但不确定它是否是最好的方法。
-(void*)method: (int) iteration {
[photoOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
[flash turnOffFlash];//turning off flash for second picture
//perform needed work
//base case
[method: iteration-1];
}];
}
所以基本上我递归调用该方法以确保它只在达到回调后才重复。它基本上会同步运行异步任务。不幸的是,对于最终设计,我需要能够无限地运行它。递归执行此操作将失败。如果有更好的方法,请告诉我。