2010-09-10 27 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"); 
相關問題