2016-12-26 7 views
0

でGCDでの同時キューは、私は、同時キューを作成3迅速 で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") 
} 

//印刷機能を使用すると、運動場でこれをやっている場合、これは

答えて

1

を発行解決することができますしてください Excutedされていません、あなたはそのexeを指示したいプレイグランドのトップレベルコードの終わりに達すると、注意を続けるべきです。あなたはneedsIndefiniteExecutionでこれを行う:

import PlaygroundSupport 

PlaygroundPage.current.needsIndefiniteExecution = true 

needsIndefiniteExecutionのドキュメントが言うように:

不定実行が有効になっているかどうかを示すブール値。 デフォルトでは、すべての最上位コードが実行され、実行が終了します。非同期コードで作業する場合、不定期実行を有効にして、プレイグランドの最上位コードの終わりに達した後で実行を続行できるようにします。これはスレッドとコールバックに実行時間を与えます。

不定期実行が有効な場合でも、プレイグラウンドを編集すると自動的に実行が停止します。

needsIndefiniteExecutiontrueトップレベルコードの終了後も実行を続行します。その時点で実行を停止するには、falseに設定します。 デフォルト値はfalseです。 liveViewnilの値に設定されている場合はtrueに設定されます。

+0

ループ実行に時間がかかりますので、実行が完了するかオートが終了してくれてありがとうございます。 –

+0

質問が分かりません。実行が終了したら何をしたいですか?しかし、はい、ハードウェア構成によっては時間がかかることがあります。 – Rob

+0

私は上記のコードを実行すると、ループはまだ長い時間をカウントしており、数値が1000000に達するまで増加しています。これは正常ですか、または自分のコードに問題がありますか?ありがとうございます –