swift - 在 Swift 中休眠或延迟 Timer 线程

标签 swift multithreading

我一直在尝试在自动重复计时器上创建一两秒的延迟。这就是我创建计时器的方式:

currentThread = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(Movement.updatePosition), userInfo: nil, repeats: true)

因此定时器不断运行方法updatePosition()。但是,我在该方法中有一个 if 语句,我希望将计时器延迟几秒钟:

if distance <= respawnDistance * 0.1 {
    // Delay timer for 1 second     
}

我想我可以做到这一点:

currentThread.invalidate()

然后创建另一个在 1 秒后运行的计时器,这会导致前一个计时器重新激活。但是,我认为如果有办法让当前的计时器休眠,效率会很低吗?

最佳答案

NSTimer 不太准确。其最大分辨率约为 50 - 100 毫秒。无论如何,您可以添加一个变量来控制计时器的触发:

var doNotUpdate = false

if distance <= respawnDistance * 0.1 {
    doNotUpdate = true
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
        doNotUpdate = false
    }
}

func updatePosition() {
    if doNotUpdate { return }

    // update your position
}

关于swift - 在 Swift 中休眠或延迟 Timer 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42742608/

相关文章:

php - 无法从Laravel命令启动线程

ios - 将 MFSideMenu 3rd 方库添加到 swift 项目

ios - 如何从 Swift 中的蓝牙特性中获取数据

xcode - 将图像从 JSON 添加到文本字段

visual-studio-2008 - 2008 MFC和线程?

android - 计数器在线程中运行,由 Arduino 信号驱动,跳过前几个数字

ios - Swift 4 访问完成处理程序从类变量返回的值

arrays - 尝试将 firebase 字符串值 append 到 Collection View

multithreading - 如果操作系统管理的同一进程中的两个线程同时访问同一虚拟地址,那么在两个执行单元中会发生什么?

java - 形态学函数瓶颈的 OpenCV Android 程序