当前位置: 首页 > 面试题库 >

快速准确地测量时间,以便跨设备进行比较

商华藏
2023-03-14
问题内容

我需要能够记录反应时间,从屏幕加载或问题标签刷新到用户点击数字按钮。我找不到Apple提供的有关此文档的帮助。NSDate还不够准确,我至少需要测量毫秒。mach_absolute_time似乎受到游戏设计师的青睐,因为它在内部是一致的,但不适用于此应用程序,因为我需要在设备之间比较数据,并且mach_absolute_time取决于CPU的时间。这个Apple
Dev
Q&A

建议使用NanosecondsToAbsolute和,DurationToAbsolute但是它在obj-
c中,我找不到快速的等效文档。

是否有一个快速的版本NanosecondsToAbsolute,并DurationToAbsolute说我只是没有找到?其他一些方法可以一致地做到这一点?

这是我要添加时间的代码:

class EmotionQuestionsViewController: UIViewController{

    override func viewDidLoad() {
        super.viewDidLoad()

//mark "startTime" when view loads
    }

    @IBOutlet var questionLabel: UILabel!
    var timeResultsStack = [String]()

    var questionsStack = ["HAPPY", "ANXIOUS"]
    var questionResultsStack = [String]()
    var questionStackArrayIndex = 1

    @IBAction func RecordValueFromNumericalScaleOneToSeven(sender: UIButton) {

//mark durration time as currentTime - startTime, append to timeResultsStack

        let value = sender.currentTitle!
        questionResultsStack.append(value)

        if questionResultsStack.count < questionsStack.count{
            self.questionLabel.text = "how \(questionsStack[questionStackArrayIndex]) are you right now?"

//mark startTime when label is changed

            self.questionStackArrayIndex++

        }
        else{
            self.performSegueWithIdentifier("showResults", sender: nil)

        }
    }

问题答案:

您可以使用NSTimeInterval来测量时间(比计时器好得多)。您只需要存储两个日期(两个时间点)并减去endTime-
StartTime即可,如下所示:

import UIKit

class ViewController: UIViewController {

    var startTime: TimeInterval = 0
    var endTime: TimeInterval = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        startTime = Date().timeIntervalSinceReferenceDate
    }

    @IBAction func stopTimeAction(_ sender: Any) {
        endTime = Date().timeIntervalSinceReferenceDate
        print((endTime-startTime).time)
    }

}
extension TimeInterval {
    var time: String { .init(format: "%d:%02d:%02d.%03d", Int(self/3600),
                        Int((self/60).truncatingRemainder(dividingBy: 60)),
                        Int(truncatingRemainder(dividingBy: 60)),
                        Int((self*1000).truncatingRemainder(dividingBy: 1000))) }
}


 类似资料:
  • 问题内容: 题: 我需要比较2次-当前时间和设定时间。如果设定的时间是将来的时间,请找出剩余的分钟数,直到所说的未来时间为止。 其他资讯: 我目前正在使用 我从关于SO的另一个答案中窃取了有关如何以Int格式获取当前时间的信息。然后,我将未来时间分为小时(Int)和分钟(Int)并进行比较…但是,当您越过小时障碍时,这变得很奇怪。 问题答案: 您具有比较功能来比较2个NSDate来知道哪个是最新的

  • 问题内容: 我想知道一个PHP for循环执行需要多少毫秒。 我知道通用算法的结构,但是不知道如何在PHP中实现它: 问题答案: 您可以使用此功能 —返回当前的Unix时间戳(以微秒为单位) 如果将设置为,则返回一个浮点数,它表示自Unix纪元以来精确到最接近的微秒的当前时间(以秒为单位)。 用法示例:

  • 问题内容: 我需要测量程序某些部分所花费的时间(不是用于调试,而是作为输出中的功能)。准确性很重要,因为总时间将不到一秒钟。 当我遇到timeit时,我将使用time模块,该模块声称 避免了一些用于度量执行时间的常见陷阱 。不幸的是,它有一个糟糕的接口,需要一个字符串作为输入,然后才是eval的。 __ 因此,我是否需要使用此模块来准确地测量时间,还是时间足够?它指的是什么陷阱? 谢谢 问题答案:

  • 要实践本手册,你必须先完成存储集群快速入门 ,并确保 Ceph 存储集群处于 active + clean 状态,这样才能使用 Ceph 块设备。 Note Ceph 块设备也叫 RBD 或 RADOS 块设备。 你可以在虚拟机上运行 ceph-client 节点,但是不能在与 Ceph 存储集群(除非它们也用 VM )相同的物理节点上执行下列步骤。详情见 FAQ 。 安装 Ceph 确认你使用了

  • 问题内容: 我正在寻找Java的快速平方根实现,以实现[0,2 * 10 ^ 12]输入范围内的双精度值。对于此范围内的任何值,精度应最多5个小数位。换句话说,结果与小数点后5位后的方法可能有所不同。但是,此方法需要比快得多。 有任何想法吗?谢谢! 问题答案: 我不相信(没有基准来证明这一点是错误的),纯Java实现比我 快得多。无论是甲骨文JRE实现和OpenJDK的实施是本地实现。

  • 问题内容: 因此,我拥有这些文本字段,我意识到它们都具有相同的属性,因此我创建了一个名为“ UserInputs ”的新类,并从进行了扩展,除一件事外,其他所有内容均正常运行,功能不起作用,我的意思是当我专注于它们时不起作用,我想在代码中添加它,因为当您专注于我的输入字段时,它们会更改边框,我该如何正确地从 我唯一的问题是该功能: 因此不起作用。 这是我 上课的 所有内容: 这是我的 子类 : 当