如何在Linux上快速进入睡眠模式

时间:2018-06-27 02:42:13

标签: swift linux swift-package-manager

我正在尝试编写一个循环运行并每30秒执行一些代码的小程序。

我不太关心它在时间上是否准确,但是我确实关心该程序可以在linux平台上编译和运行,并且可以使用swift软件包管理器进行构建和测试。

我的第一枪就像

while true {
    print("doing the work")
    sleep(30) // also tried usleep(30*1000*1000)
}

很显然,在Swift 4中没有找到对sleep(_:)的引用,并且该代码无法编译。我曾尝试使用Timer,但是由于计时器在后台运行,并且主线程的唯一工作就是安排计时器,因此计时器一开始计时,程序便会立即退出。

这必须比看起来容易。我在Swift中的线程管理方面缺少什么,这可以解释我如何发现这一点?

---编辑 要弄清为什么这与许多建议的重复项不同:

明确地试图使主线程进入睡眠状态,并且如上所述,我无法使用公认的答案建议的sleep函数使Linux上的Swift进行编译别处。我的程序在CLI上下文中的上下文意味着在后台线程中延迟的操作(如许多其他可用来源所建议的那样)在这里不起作用。另外,此CLI在Linux上运行,因此我不能依赖仅iOS的库。

2 个答案:

答案 0 :(得分:1)

您可以从sleepGlibc导入Darwin,但更好的是,您可以从Foundation使用Thread.sleep(forTimeInterval:)

import Foundation

while true {
    print("hello")
    Thread.sleep(forTimeInterval: 0.1)
}

答案 1 :(得分:0)

尝试这个

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(30), execute: {
    // Put your code which should be executed with a delay here
})