我在单身人士中创建了一个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
从射击。
答案 0 :(得分:0)
不幸的是,这个错误似乎与我在不同线程上更新reconnectTimer
字段的事实有关。每次纠正问题时强制在同一个线程上更新它。