我正在尝试编写一个循环运行并每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的库。
答案 0 :(得分:1)
您可以从sleep
或Glibc
导入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
})