2016-12-26 55 views
0

我有我創建併發隊列中迅速3 與GCD的問題,我通過函數在此隊列中這個功能調用另一個功能 我需要打印所經過的時間爲每個調用 但我認爲實現併發隊列內切下面我的代碼:問題GCD併發隊列中迅速3

// peform task with the concurrent queue 
class DoCalculations{ 
    func doCalc() { 
     let x = 100 
     let y = x * x 
     _ = y/x 

    } 

    func performCalculation(itretion:Int,tag:String) { 
     let start = CFAbsoluteTimeGetCurrent() 

     for _ in 0..<itretion { 
      self.doCalc() 
     } 

     let end = CFAbsoluteTimeGetCurrent() 

     print("tag :\(tag) : \(end - start)") 

    } 
} 


let calc = DoCalculations() 

let cQueue = DispatchQueue(label: "com.myCompany", attributes: .concurrent) 

cQueue.async { 
    calc.performCalculation(itretion: 1000000, tag: "sync1") 
} 
cQueue.async { 
    calc.performCalculation(itretion: 1000, tag: "sync2") 
} 

cQueue.async { 
    calc.performCalculation(itretion: 100000, tag: "sync3") 
} 

//打印功能不Excuted 請就可以解決這個問題

回答

1

如果你這樣做是在操場,你想指出這個exe在遊樂場的頂級代碼到達後,cution應該繼續「。爲此,您可以needsIndefiniteExecution

import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 

由於文檔needsIndefiniteExecution說:

一個布爾值,指示執行不確定是否啓用。 默認情況下,所有頂級代碼都被執行,然後執行被終止。使用異步代碼時,啓用無限制執行以允許在達到操場的頂級代碼結束後繼續執行。這反過來又給線程和回調時間執行。

即使啓用了無限期執行,編輯操場也會自動停止執行。

設置needsIndefiniteExecutiontrue在頂級代碼結束後繼續執行。將其設置爲false即可在該點停止執行。 默認值爲false。當liveView設置爲非nil值時,它被設置爲true。

+0

非常感謝你,但是當我完成執行或自動完成時,請執行它,因爲循環需要很長時間 –

+0

我不明白這個問題。執行結束後你想要發生什麼?但是,是的,這可能需要很長時間,這取決於您的硬件配置。 – Rob

+0

我的意思是如果我執行上面的代碼循環仍然計數長時間和數字是增加,直到達到1000000這是正常的或有問題與我的代碼?謝謝 –