2010-09-10 91 views
0

有什么方法可以知道队列被暂停,我可以恢复它,反之亦然?因为否则应用程序崩溃。或者我需要将这些信息存储在一些变量中并检查?如何确定dispatch_queue_t在iOS中是否被暂停?

+0

你想出如何做到这一点? – SpaceDog 2011-01-31 20:51:52

+0

我只是有一个布尔变量来存储队列的状态。 – tadasz 2011-02-08 01:29:03

+0

我正在考虑这个,以及我认为我会设置一个布尔队列暂停状态。我希望我有更多的选择,比如让队列在恢复之前等待x毫秒。 – Brennan 2011-07-18 17:24:06

回答

0
BOOL dispatch_queue_is_empty(dispatch_queue_t queue) 
{ 
    dispatch_group_t group = dispatch_group_create(); 

    dispatch_group_enter(group); 
    dispatch_async(queue, ^{ 
     dispatch_group_leave(group); 
    }); 

    int64_t maxWaitTime = 0.00000005 * NSEC_PER_SEC; 
    BOOL isReady = dispatch_group_wait(group, maxWaitTime) == 0; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
     dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 
     dispatch_release(group); 
    }); 

    return isReady; 
} 

为了测试

dispatch_queue_t queue = dispatch_queue_create("test", 0); 

NSLog(@"Is empty %@", dispatch_queue_is_empty(queue) ? @"YES" : @"NO"); 

dispatch_async(queue, ^{ 
    for(int i = 0; i < 100; i++) 
    { 
     NSLog(@"... %i", i); 
    } 
}); 

NSLog(@"Is empty %@", dispatch_queue_is_empty(queue) ? @"YES" : @"NO"); 
相关问题