2017-08-06 19 views
0

でDispatchWorkItemを再開私は、このオブジェクトを持っている:一時停止する方法/スウィフト

lockWallTask = DispatchWorkItem(block: { 
     self.lockWall() 
    }) 
    DispatchQueue.main.asyncAfter(deadline: .now() + 10, execute: lockWallTask) 

だから、10秒後に実行されています。しかし、私はこのアイテムを一時停止してから再開しようとしています。例:

3秒後にアイテムを一時停止します。つまり、実行に7秒間がかかります。私は5分のような他のものをし、その後私はアイテムを再開し、まだ実行するために残り7秒です。私はこの人生、これを達成しようとしていた。

DispatchQueue.resume(task) 

DispatchQueue.suspend(task) 

しかし、私はこのコンパイルエラー与えた:

enter image description here

が、私はそのエラーを理解していません。のタイプが「DispatchWorkItem」

ある変数タスクがどのようにして、一時停止、または一時停止、DispatchWorkItemし、それを再開達成するであろうか?

+0

試し 'DispatchQueue.main.resume()' –

+0

ないが、その再開すると、すべてのDispatchObjectsを中断? @AdrianBobrowskiを実行しているいくつかのオブジェクトがあります – Pablo

+0

はい、この「DispatchQueue」 –

答えて

0

あなたは、一時停止、再開、停止してそれに応じて操作を実行できるタイマーDispatchSourceを使用する必要があります。

var timer: DispatchSource? 

func resumeTimer() { 
    guard let timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(rawValue: 0), queue: mainQueue) as? DispatchSource else { return } 
    timer.setEventHandler { 
     mainQueue.async(execute: { [weak self] in 
      self?.runTimer() 
     }) 
    } 
    timer.scheduleRepeating(deadline: .now(), interval: .seconds(10), leeway: .seconds(1)) 
    timer.resume() 
} 

func pausedTimer() { 
    if let timer = timer { 
     timer.suspend() 
    } 
} 

func stoppedTimer() { 
    if let timer = timer { 
     timer.cancel() 
    } 
} 
関連する問題