如何在 linux 上的 swift 线程睡眠

How to thread sleep in swift on linux

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

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

我的第一枪就像

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

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

这比看起来要容易得多。关于 Swift 中的线程管理,我缺少什么可以解释我发现它有多难?

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

明确地 试图让主线程休眠,正如我上面提到的,我无法在 Linux 上获得 Swift 进行编译使用其他地方接受的答案建议的 sleep 函数。我的程序在 CLI 上下文中的上下文意味着后台线程中的延迟操作,正如许多其他可用来源所建议的那样,在这里不起作用。此外,此 CLI 在 Linux 上 运行ning,因此我不能依赖仅 iOS 的库。

试试这个

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

您可以从 GlibcDarwin 导入 sleep,但更好的是,您可以从 Foundation

使用 Thread.sleep(forTimeInterval:)
import Foundation

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