let expecation = expectationWithDescription("do tasks")
for i in 0...40 {
let afterTiming = 0.3 * Double(i)
let startTime = CFAbsoluteTimeGetCurrent()
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(afterTiming * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print("\(afterTiming) - \(timeElapsed) : \(i)")
}
}
waitForExpectationWithTimeout(14)
nach 30 führt seine fast eine Sekunde aus, und Konsole mit, die zwei und zwei Drucklinien wirken seltsam beginnen gleichzeitigWie führe ich eine Aktion genau nach 0,3 Sekunden für eine bestimmte Anzahl von Malen?
9.0 - 9.88806998729706 : 30
9.3 - 9.88832598924637 : 31
Gibt es eine Möglichkeit für einen XCTest
näher zu kommen, um tatsächlich die Anfragen zu tun " auf die richtige Zeit "? Wie die Anfrage bekommen, was getan werden soll, nach 9 Sekunden nicht nach 9,88 Sekunden getan ..
Ich habe das 'XCTest'-Tag entfernt, da dies nichts mit XCTests zu tun hat. Es ist nur ein Zufall, dass Sie das für einen Test benötigen. Obwohl ... Ich würde gerne sehen, was Sie tatsächlich versuchen, so zu testen (und dann den Tag zurück hinzufügen). – nhgrif
@nhgrif es ist wichtig, dass XCTest erwähnt wird, weil es tatsächlich waitForExpectationsWithTimeout() aufruft - ich bin mir nicht sicher, ob das funktionieren wird, zum Beispiel das Hauptthread in Tests zu blockieren – hakonbogen
Wenn Sie 'XCTest' zu erwähnen, ist es wichtig, * muss wirklich den Test bereitstellen, den Sie für den Kontext ausführen möchten. So wie es jetzt aussieht, ist dies ein kleines [XY-Problem] (http://meta.stackexchange.com/q/66377/244435). – nhgrif