Я взял в свои руки создание приложения, которое пингует локальные IP-адреса и сохраняет ли доступный IP-адрес в таблице. Проблема в том, что мне нужно выполнить эту задачу asyn c, и количество потоков должно быть легко редактируемым из кода. Например: если максимальное количество потоков равно 10, тогда 10 функций "ping ()" запускаются одновременно с разными IP-адресами из массива. PlainPing похоже на путь к go, но я не могу запустить пингеры asyn c, они, похоже, застряли при запуске таким образом. Есть предложения?
Вот код: (это пример проверки только 10 IP-адресов.)
var queue = OperationQueue()
@IBAction func startPing(_ sender: UIBarButtonItem) {
queue = OperationQueue()
queue.maxConcurrentOperationCount = 10
pings.removeAll()
for i in 1...244 {
let newIp = Ip(ip: "192.168.1.\(i)")
pings.append(newIp)
}
for i in 1...10 {
let operation = BlockOperation {
self.ping(index: i)
}
queue.addOperation(operation)
}
pingButton.isEnabled = false
}
func ping(index: Int) {
let ping = pings[index-1]
print(ping.ip) //THIS WORKS and after that PlainPing isn't.
PlainPing.ping(ping.ip, withTimeout: 3, completionBlock: { (timeElapsed:Double?, error:Error?) in
if let latency = timeElapsed {
print("\(ping) latency (ms): \(latency)")
}
if let error = error {
print("error: \(error.localizedDescription)")
}
})
}
Я читал, что SimplePing не работает с GD C. Какие бы тогда были другие решения?