Быстрая многозадачность - PullRequest
0 голосов
/ 06 мая 2020

Я хочу выполнить функцию, которая должна повторять ее содержимое каждые 60 секунд. Эту функцию следует вызывать 60 раз с задержкой запуска в 1 секунду на каждый вызов функции. Таким образом, через 1 минуту функция вызывалась 60 раз, и каждую секунду я получаю обновление от одной функции, потому что функции повторяют свое содержимое через 60 секунд. Я бы использовал фоновый поток для таких вызовов функций:

func callerfunc() {

DispatchQueue.global(qos: .background).async {
    var callerhelper = 0
    let timer2 = Timer(timeInterval: 1, repeats: true) { timer in
    callerhelper += 1
    if callerhelper > 60 {
    timer.invalidate()
    }
    else {
    syncfunction()
    print("syncfunc called every second until 1 minute")
    }
    }
}

let runLoop = RunLoop.current
runLoop.add(timer2, forMode: .default)
runLoop.run()

}
}

func syncfunction {

DispatchQueue.global(qos: .background).async {
let timer3 = Timer(timeInterval: 60, repeats: true) { time in
print("task performed every 60 sec")
}

let runLoop = RunLoop.current
runLoop.add(timer3, forMode: .default)
runLoop.run()




}


}

Но код работает некорректно. Здесь ли идея многопоточности? Как я могу улучшить свой код?

1 Ответ

0 голосов
/ 06 мая 2020

Попробуйте это на игровой площадке.

import Foundation

func callerfunc() {
  var callerhelper = 0
  let _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
    callerhelper += 1
    if callerhelper == 60 {
      print("task performed every 60 sec")
      callerhelper = 0
    }
    else {
      print("syncfunc called every second until 1 minute. \(callerhelper)")
    }
  }
}

callerfunc()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...