edo*_*Dev 3 iphone semaphore objective-c ios
我开发了以下方法,它检查应用程序与服务器通信的能力.该方法执行一个简单的查询,并知道如果它得到一个结果,应该连接应用程序(基本的ping机制).
- (BOOL)isAppConnected
{
__block BOOL isConnected = NO;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[[SFRestAPI sharedInstance] performSOQLQuery:@"SELECT id FROM Account LIMIT 1"
failBlock:^(NSError *e) {
isConnected = NO;
NSLog(@"NOT CONNECTED %@", e);
NSLog(@"fail block ON THE MAIN THREAD? %hhd", [NSThread isMainThread]);
dispatch_semaphore_signal(semaphore);
} completeBlock:^(NSDictionary *dict) {
isConnected = YES;
NSLog(@"%@", dict);
NSLog(@"complete block ON THE MAIN THREAD? %hhd", [NSThread isMainThread]);
dispatch_semaphore_signal(semaphore);
}];
// if the wait times-out we will receive a non-zero result and can assume no connection to SF
//When using: DISPATCH_TIME_FOREVER the app hangs forever!!
int waitResult = dispatch_semaphore_wait(semaphore, 30 * NSEC_PER_SEC);
NSLog(@"waitResult: %d", waitResult);
return isConnected;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Apple文档中建议的'dispatch_semaphore_wait'
我的目标是等待响应或短暂的超时,以确定我们是否真的有一个有效的连接.
使用上面的代码,'dispatch_semaphore_wait'永远不会实际等待,即执行不会在该行停止,而是立即继续(总是将49返回到dispatch_semaphore_wait调用).这是除非我使用DISPATCH_TIME_FOREVER,在这种情况下应用程序永远挂起...
目前我从主线程调用此方法.我知道这是一个坏主意,但我希望在重构之前看到它按预期工作.
什么可能导致这种行为?谢谢.
gna*_*729 11
dispatch_semaphore_wait的参数不是延迟,而是信号量应该唤醒的时间.1月1日午夜过后,您将醒来30秒.1970年(或2001年,不确定).使用dispatch_time函数.
| 归档时间: |
|
| 查看次数: |
8932 次 |
| 最近记录: |