gpt4 book ai didi

ios - 并发进程执行的同步

转载 作者:行者123 更新时间:2023-11-29 11:07:53 24 4
gpt4 key购买 nike

我有一些数据处理的并发操作。在处理过程中,我需要检索该位置的反向地理编码。众所周知,- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler 也在后台线程执行地理编码请求,调用后立即返回。本地理编码完成请求时,它会在主线程上执行完成处理程序。在地理编码器检索到结果之前,如何阻止我的并发操作?

__block CLPlacemark *_placemark

- (NSDictionary *)performDataProcessingInCustomThread
{
NSMutableDictionary *dict = [NSMutableDictionary alloc] initWithCapacity:1];
// some operations

CLLocation *location = [[CLLocation alloc] initWithLatitude:40.7 longitude:-74.0];
[self proceedReverseGeocoding:location];

// wait until the geocoder request completes

if (_placemark) {
[dict setValue:_placemark.addressDictionary forKey:@"AddressDictionary"];

return dict;
}

- (void)proceedReverseGeocoding:(CLLocation *)location
{
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
if ([error code] == noErr) {
_placemark = placemarks.lastObject;
}
}];
}

最佳答案

要实现这一点,我们可以使用 dispatch_semaphore_t。首先我们需要在类中添加信号量:

dispatch_semaphore_t semaphore;

当我们正在处理数据并准备接收地理编码数据时,我们应该创建调度信号量并开始等待信号:

semaphore = dispatch_semaphore_create(0);
[self proceedReverseGeocoding:location];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

在 CLGeocodeCompletionHandler 结束时,我们只需要发送信号以恢复数据处理:

dispatch_semaphore_signal(semaphore);

在此之后数据处理将继续

关于ios - 并发进程执行的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12897731/

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