2015-08-28 66 views
3

我接手深受客戶的員工誰是新的iOS開發(並從此離開公司)你可以查詢一個GCD串行隊列中的待處理數量嗎?

我試圖讓一個手柄的一個寫的客戶端應用程序的所有權/提高它的使用的併發性。它創造了一系列不同延遲的不同GCD定時器,並且時機非常混亂。

我可能會將其轉換爲使用GCD串行隊列,因爲我需要按順序運行任務(但不在主線程中)。我想監視未完成任務的深度上隊列。 NSOperationQueues有一個用於查看待處理任務數量的工具,但我沒有看到類似的GCD串行隊列選項。有這樣的設施嗎?

我想我可以構建一個NSOperationQueue,並使每個操作都依賴於以前的操作,從而創建一個串行操作隊列,但是這對於診斷任何一個隊列中的任務數量很簡單時間。

回答

7

沒有公共API來查詢GCD隊列中的任務數量。你可以自己創建一些東西,或者使用NSOperationQueue。如果你想建立的東西,你可以換dispatch_a/sync遞增計數器,然後排隊另一塊與遞減計數器,這樣每個操作:

int64_t numTasks = 0 

void counted_dispatch_async(dispatch_queue_t queue, dispatch_block_t block) 
{ 
    OSAtomicIncrement64(&numTasks); 
    dispatch_async(queue, ^{ 
     block(); 
     OSAtomicDecrement64(&numTasks); 
    }); 
} 

或者你可以只使用NSOperationQueue。這就是我要做的。一位智者曾告訴我:「使用最高級別的抽象來完成工作。」

相關問題