定时器没有触发(timeInterval总是== 0.0)

时间:2017-05-18 21:35:31

标签: swift timer swift3

我在单身人士中创建了一个model.fit(X_train, Y_train, callbacks=[WeightsSaver(5)]) ,我一直在为Timer没有解雇的原因而战斗。我已经查看了这里的帖子,但我没有找到一个我认为直接回答我的问题。

Timer

updateReconnectTimer中的print语句打印出来:

尝试重新连接self.reconnectPollInterval = 10.0可选(0.0)s

我无法解释为什么当我明确地将其设置为10.0时,为什么我的class ConnectionStateMonitor : NSObject { static let shared = ConnectionStateMonitor() var isConnected = false fileprivate let reachability = Reachability()! fileprivate var reconnectTimer: Timer? fileprivate var reconnectPollInterval = TimeInterval(10.0) func initialise() { reachability.stopNotifier() reachability.whenReachable = { reachability in if reachability.isReachableViaWiFi { Log.debug(message: "Reachable via WiFi") } else { Log.debug(message: "Reachable via Cellular") } self.updateConnectionState(isConnected: true) } reachability.whenUnreachable = { reachability in Log.debug(message: "Not reachable") self.updateConnectionState(isConnected: false) } do { try reachability.startNotifier() } catch { //print("Unable to start notifier") } } func updateConnectionState(isConnected: Bool) { let wasConnected = self.isConnected Log.debug(message: "Update connection state: \(isConnected)") synchronize(lockObj: self, closure: { self.isConnected = isConnected }) self.updateReconnectTimer() } fileprivate func updateReconnectTimer() { // Suspend any pending call. self.reconnectTimer?.invalidate() if !self.isConnected { self.reconnectTimer = Timer.scheduledTimer(timeInterval: self.reconnectPollInterval, target: self, selector: #selector(ConnectionStateMonitor.attemptReconnect), userInfo: nil, repeats: false) // Uncommenting below fires the timer. //self.reconnectTimer?.fire() print("attempting to reconnect in self.reconnectPollInterval = \(self.reconnectPollInterval) \(self.reconnectTimer?.timeInterval)s") } else { self.reconnectTimer = nil } } @objc func attemptReconnect() { print("attempting to reconnect") self.comms?.hello(completionHandler: { success, message in self.updateReconnectTimer() }) } } 的timeInterval属性为0.0。正确调用Timer会调用我的函数,因此我知道它已正确连接。

同时确认没有后续调用updateReconnectTimer函数会干扰。

有什么明显的我遗失了吗?

编辑:

我添加了更多代码来显示问题,看来通过更新fire中的Timer来自Reachability这将是一个后台线程似乎会阻止Timer从射击。

1 个答案:

答案 0 :(得分:0)

不幸的是,这个错误似乎与我在不同线程上更新reconnectTimer字段的事实有关。每次纠正问题时强制在同一个线程上更新它。